2013-04-12 49 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