OpenCV Error: Assertion failed (src.size == dst.size && src.channels() == dst.channels()) in cvConve

 

发现问题:在作kinect采集的深度图去噪的时候遇到了cvConvertScale格式转换的问题。数组

OpenCV Error: Assertion failed (src.size == dst.size && src.channels() == dst.channels()) in cvConvertScale, file /home/lzp/opencv-2.4.9/modules/core/src/convert.cpp, line 1372 terminate called after throwing an instance of 'cv::Exception' what(): /home/lzp/opencv-2.4.9/modules/core/src/convert.cpp:1372: error: (-215) src.size == dst.size && src.channels() == dst.channels() in function cvConvertScale *** 崩溃,返回值:0 ***

使用的KDevelop IDE单步调试,很快找到了出错语句。spa

cvConvertScale(frameSet[0], image8u, 255.0 / 4096.0, 0); 

 标记一下ConvertScale的用法
-->使用线性变换转换数组 .net

void cvConvertScale( const CvArr* src, CvArr* dst, double scale=1, double shift=0 );

src 输入数组.
dst 输出数组
scale 比例因子.
shift 该加数被加到输入数组元素按比例缩放后获得的元素上.

总结出现该错误的缘由有:调试

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

排查代码和图像数据源,找到了个人问题所在。 blog

cout << "width" << temp->width << "height" << temp->height
<< "channel" << temp->nChannels
<<"depth" << temp->depth << endl;
运行结果:
width:640,
height:480,
channel:3,
depth:8

  深度图像由于未知缘由,变成了3通道的图像!io

参考资料:opencv

http://blog.csdn.net/skyndsc/article/details/53870561function

相关文章
相关标签/搜索