2013-04-12 47 views
3

我正在使用該程序來讀取並顯示圖像。 我不知道爲什麼它顯示這個奇怪的錯誤:未知函數中的聲明失敗

assertion failed (scn==3 || scn ==4) in unknown function,file......\src\modules\imgproc\src\color.cpp line 3326

我改變了一些圖片,有時候它運行沒有錯誤,但是,即使當它運行一切,它顯示的窗口,但不是在它的形象。哪裏不對?

#include "stdafx.h" 
#include "opencv2/calib3d/calib3d.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 


using namespace cv; 
using namespace std; 

void main() 
{ 

    Mat leftImg,frame=imread("C:\\Users\\user\\Downloads\\stereo_progress.png"); 
    leftImg=imread("C:\\Users\\user\\Downloads\\dm_sl.gif");//add of left camera 


    cvtColor(leftImg,leftImg,CV_BGR2GRAY); 
    imwrite("imreadtest.txt",leftImg); 


    imshow("cskldnsl",leftImg); 
    getchar(); 
} 

回答

3
  1. 如回答別人,請確保cvtColor中的參數1不是1通道圖像。按類型()檢查它。應該是CV_8UC3等。

  2. waitKeyimshow。圖像會顯示出來。

  3. 我不知道爲什麼要保存leftImg在imreadtest.txt。 [雖然它不是讓錯誤]

+0

thnx barshan第二點做了伎倆..但是我很困惑,爲什麼getchar()應該導致這個問題。 –

0

首先,通過測試leftImg.data != 0,確保圖像正確加載。

然後,可以強制信道的數目通過將作爲第二個參數cv::imread()CV_LOAD_IMAGE_GRAYSCALECV_LOAD_IMAGE_COLOR爲了確保加載灰度(1道)或顏色(3個通道)圖像,的任何類型圖像文件是。

1

使用cvtColor()時,不能對輸入矩陣和輸出矩陣使用相同的矩陣。如果您不需要以後的彩色圖像,通過一個副本是一個簡單的解決方案:

cvtColor(leftImg.clone(), leftImg, CV_BGR2GRAY); 

另一種解決方案是使用新的輸出矩陣:

Mat leftImgGray; 
cvtColor(leftImg, leftImgGray, CV_BGR2GRAY); 
imshow("cskldnsl",leftImgGray); 
+0

親愛的尼科感謝你的幫助,我想從這個,除了增加,直到我renoved的getchar()和使用waitKEy而是我不能獲得圖像的窗口會顯示沒有錯誤顯示cts後imshow也將被執行,但只有在刪除getchar()它完全消失任何提示y是這樣嗎? –

+0

@AbhinavSRai'waitKey()'是必需的,因爲只有在調用waitKey()時,OpenCV纔會處理GUI事件(例如創建/更新窗口)。看到http://stackoverflow.com/questions/5217519/opencv-cvwaitkey – Niko