OpenCV中IplImage->imageData赋值需要注意的问题

OpenCV中IplImage->imageData赋值需要注意的问题_第1张图片

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

OpenCV中IplImage->imageData赋值需要注意的问题_第2张图片

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

	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就可以解决问题了。

OpenCV中IplImage->imageData赋值需要注意的问题_第3张图片

 

图片来自网上

 

你可能感兴趣的:(OpenCV中IplImage->imageData赋值需要注意的问题)