1. 程式人生 > >OpenCV中IplImage->imageData賦值需要注意的問題

OpenCV中IplImage->imageData賦值需要注意的問題

原影象檢測人臉區域,在將人臉區域賦值給一個使用cvCreateImage函式建立的影象時出現了問題。

問題影象如上圖所示,原始碼如下所示:

	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就可以解決問題了。

圖片來自網上