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


 

發現問題:在做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單步調試,很快找到了出錯語句。

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

 標記一下ConvertScale的用法
-->使用線性變換轉換數組

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

src 輸入數組.
dst 輸出數組
scale 比例因子.
shift 該加數被加到輸入數組元素按比例縮放后得到的元素上.

總結出現該錯誤的原因有:

1.check這兩個圖或者矩陣是不是初始化了
2.如果初始化了,初始化的大小是不是一樣,即兩者有沒有相同的長寬
3.兩者的depth深度是不是一樣,即是不是一個是三通道的,一個是單通道的。
或者一個是單通道32位浮點類型,一個是單通道8位整形類型

排查代碼和圖像數據源,找到了我的問題所在。

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

  深度圖像因為未知原因,變成了3通道的圖像!

參考資料:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM