2011-08-10 10:11
4711人阅读
评论(0)
收藏
举报
原图像检测人脸区域,在将人脸区域赋值给一个使用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*<SPAN style="COLOR: #ff0000">width</SPAN> + j) =
- *(image->imageData + m*image-><SPAN style="COLOR: #ff0000">width</SPAN> + n);
- n++;
- }
- m++;
- }
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*<span style="color:#ff0000;">width</span> + j) =
*(image->imageData + m*image-><span style="color:#ff0000;">width</span> + n);
n++;
}
m++;
}
由于IplImage->width这个变量并不是经过4字节对齐后的宽度,由于使用cvCreateImage创建图像时,svSize中的宽度并不一定是4字节的倍数,上述代码中使用了width导致图像出现交叉的现象,将代码中width换为widthStep就可以解决问题了。