写了一段代码,已知图像数据,调用cvShowImage来显示图像,
代码:
结果:
为第二个图,显然有问题。
反思&问题:
1、pbinimg和pBinImg的widthstep可能不一样。单步调试发现问题的确在这里,pbinimg->widthStep=537;pBinImg->widthStep=540;
2、应该分开写各自的widthstep,因为在分配内存时可能会存在不对齐的问题。
更正:
代码:
结果:
为第二个图,显然有问题。
反思&问题:
1、pbinimg和pBinImg的widthstep可能不一样。单步调试发现问题的确在这里,pbinimg->widthStep=537;pBinImg->widthStep=540;
2、应该分开写各自的widthstep,因为在分配内存时可能会存在不对齐的问题。
更正:
... //函数传进来的ImgType* pBinImg
/*typedef struct _ImgType{
UInt32 width;
UInt32 height;
UInt32 widthStep;
Ptr imageData;
}ImgType;*/
IplImage *pbinimg = NULL;
int temp = 0;
int temp1 = 0;
cvNamedWindow("pBinImg",1);
pbinimg = cvCreateImage(cvSize(pBinImg->width,pBinImg->height),IPL_DEPTH_8U,1);
for(i=0; i<pBinImg->height; i++)
{
temp = i*pBinImg->widthStep;
temp1 = i*pbinimg->widthStep; //两个的widthstep分开用
for (j=0; j<pBinImg->width; j++)
{
*((unsigned char*)pbinimg->imageData+temp1+j) = *((unsigned char*)pBinImg->imageData+temp+j);
}
}
cvShowImage("pBinImg",pbinimg);
...
正确结果: