首页 > 代码库 > opencv error :assertion faild (src.depth()==dst.depth()&&src.size==dst.size)

opencv error :assertion faild (src.depth()==dst.depth()&&src.size==dst.size)

在用到opencv中出现 

opencv error :assertion faild (src.depth()==dst.depth()&&src.size==dst.size)
找这个bug找了好久,网上有这样几种说法:

1.check这两个图或者矩阵是不是初始化了
2.如果初始化了,初始化的大小是不是一样,即两者有没有相同的长宽
3.两者的depth深度是不是一样,即是不是一个是三通道的,一个是单通道的。
或者一个是单通道32位浮点类型,一个是单通道8位整形类型

还是没解决的话,那么接着往下看

如果你用的是以下代码,

cvSetImageROI(grayEqualizeImage,cvRect(cr->x,cr->y,IMG_WIDTH,IMG_HEIGHT)); 
cvCopy(grayEqualizeImage,dstImage,0);
cvResetImageROI(grayEqualizeImage);

那么你要检查你 cvSetImageROI 这个函数是否执行成功,因为在cvSetImageROI函数中有一个cvRect结构,

如果你的roi区域因为 IMG_WIDTH,IMG_HEIGHT 而超出图片部分,那么就会造成和上面说的第二种情况冲突

2.如果初始化了,初始化的大小是不是一样,即两者有没有相同的长宽


诶,,,折腾我2小时了,擦!效率太低了!!!


ps:忘了说解决方法了,在cvSetImageROI之前,判断下是否超出图片区域。。。额,等于没说,总之自己加个判断吧

或者用以下方式:

IplImage *pSubImg =cvGetImage(cvGetSubRect(pImg, cvCreateMatHeader(100, 100, CV_8UC1),cvRect(0, 0, 100, 100)), cvCreateImageHeader(cvSize(100, 100), 8,1));


这个函数的用法,附上个链接 http://blog.chinaunix.net/uid-24517893-id-3226126.html