OpenCV中IplImage->imageData賦值需要注意的問題
阿新 • • 發佈:2019-02-10
原影象檢測人臉區域,在將人臉區域賦值給一個使用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就可以解決問題了。
圖片來自網上