使用cvSetData(cvSetImageData)将DIB转成IplImage的问题,以及cvCvtColor的使用问题
使用cvSetData(cvSetImageData)将DIB转成IplImage的问题,以及cvCvtColor的使用问题
如果不用cvSetImage,改用image->imageData=(char*)lpDIBBits是否可行,image->imageDataOrigin不用管吗?请大家看看下面的代码有什么问题?谢谢!
hDIB是内存中已有的一个DIB的HANDLE(24位彩色,768*576),现在想把它转成灰度图.用如下代码,编译,链接没
问题,但运行就提示"Unhandled excepton in MyApp.exe(CV097.DLL):0xC0000005:Access Violation",
LPBYTE lpDIB = (LPBYTE) ::GlobalLock((HGLOBAL) hDIB);
//声明一个CDIB对象,为了使用它的函数成员FindDIBBits找到DIB图像的图像数据区
CDIB m_clsDIB;
// 找到DIB图像象素起始位置
LPBYTE lpDIBBits = m_clsDIB.FindDIBBits(lpDIB);
//声明IplImage指针
IplImage * image;
//下面的IPL_DEPTH_8U,3两个参数不知是否合适,请指正
image=cvCreateImage(cvSize(768,576)),IPL_DEPTH_8U,3);
//下面的768*576*3不知是否正确,cvSetImageData,如果用image->imageData=(char*)lpDIBBits是否能达到同
样的效果;
cvSetData(image,lpDIBBits,768*576*3);
//image2作为作为转换成灰度图后的存放目标,所以用单通道
IplImage * image2=cvCreateImage(cvSize(768,576),IPL_DEPTH_8U,1);;
//这个函数如果image2是3通道是否可行?
cvCvtColor(image,image2,CV_RGB2GRAY);
//把image2中的数据拷贝回lpDIBBits,不知image2->imageData和image->imageDataOrigin那个应该作为源
memcpy(lpDIBBits,image2->imageData,768*576*1);
::GlobalUnlock((HGLOBAL) hDIB);
cvReleaseImage(&image);
cvReleaseImage(&image2);
// 重画视图
Invalidate();
问题点数:20、回复次数:0Top




