首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

图像拷贝 错位 O_o解决方法

2013-07-01 
图像拷贝 错位 O_o自己写了一个这样的函数:实现将 原始图像---src 指向其数据img-imageData, 其中 img是

图像拷贝 错位 O_o

自己写了一个这样的函数:

实现将 原始图像   ---src 指向其数据img->imageData, 其中 img是灰度图,其步长为 widStep
中 rect 区域 拷贝到 dst 中。。。。

void copyData(void * src, int widStep, void * dst, void *  rect)
{
ScRect* r = (ScRect*)rect;
int i = 0, j = 0;
unsigned char* pSrc = (unsigned char*)src;
unsigned char* pDes = (unsigned char*)dst;
for(i = r->y; i < r->y + r->h;i ++)
{
pSrc = (unsigned char*)src+ i * widStep + r->x;
for(j = 0;j < r->w;j++)
{
*pDes++ = *pSrc++;
}
}

r = NULL;
}



测试:
int main()
{
IplImage *img = cvLoadImage("D:\\vv.jpg", 0);
CvRect r = cvRect(0, 0, 200, 200);
IplImage *eye = cvCreateImage(cvSize(200, 200), 8, 1);
copyData((void *)img->imageData, img->widthStep ,  eye->imageData, &r);
cvShowImage("eye", eye);
cvWaitKey(-1);
}


Q1:
img->widthStep  开始的时候,这个 也的是 img->width
测试的时候发现,大部分图片都Ok,但有一个图出现了错位的情况。
观察了下,该图虽然也是 以灰度图 读进来的,但是其 widStep != width


Q2:
读入视频测试的时候,发现还是有好多图片拷贝错位,但是间或又出现一张拷贝正确的。
很是奇怪。。。。
看起来这么简单的代码,哪里会出错呢。。。



图片 拷贝 错位 C
[解决办法]


img->width 和 img->widStep 的区别没有搞懂吧。。。。

width是图像宽度,可为任意值;

widthstep是行字节数,应该是4的倍数,不一定等于width;

所以,并不是说,灰度图读进来的图像就有 width == widStep;
[解决办法]
估计是字节对齐的原因,pSrc = (unsigned char*)src+ i * widStep + r->x;肯定是没问题的,可以把pDes也改成类似的递增方式,试一下。
[解决办法]
行字节数,必须为4的倍数, 不是的话 要 补齐

热点排行