imageData赋值需要注意的问题

原图像检测人脸区域,,在将人脸区域赋值给一个使用cvCreateImage函数创建的图像时出现了问题。

问题图像如上图所示,原代码如下所示:

[cpp] view plain

i=0; i<height; i++){ int n = startX; //int widthStep = tmpImg->widthStep; j=0; j<width; j++) { *(tmpImg->imageData + i*<span style="color: rgb(255, 0, 0);">width</span> + j) = *(image->imageData + m*image-><span style="color: rgb(255, 0, 0);">width</span> + n);

CvSize tmpSize;tmpSize.width = width;tmpSize.height = height;IplImage *tmpImg = cvCreateImage(tmpSize, IPL_DEPTH_8U, 1);int m = startY;for(int i=0; i<height; i++){int n = startX;//int widthStep = tmpImg->widthStep;for(int j=0; j<width; j++){*(tmpImg->imageData + i*width + j) =*(image->imageData + m*image->width + n);n++;}m++;}

由于IplImage->width这个变量并不是经过4字节对齐后的宽度,由于使用cvCreateImage创建图像时,svSize中的宽度并不一定是4字节的倍数,上述代码中使用了width导致图像出现交叉的现象,将代码中width换为widthStep就可以解决问题了。

图片来自网上

勇气执着的背负起那厚重的行囊,奔向远方。

imageData赋值需要注意的问题

相关文章:

你感兴趣的文章:

标签云: