断言在未知功能中失败

时间:2013-04-12 12:58:52

标签: c++ visual-c++ opencv

我正在使用这个程序来阅读和显示图像。 我不知道为什么会出现这个奇怪的错误:

  

在未知函数中断言(scn==3 || scn ==4),文件...... \ src \ modules \ imgproc \ src \ color.cpp第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 个答案:

答案 0 :(得分:3)

  1. 如其他人所述,请确保cvtColor中的parameter1不是1通道图像。按类型()检查。它应该是CV_8UC3等等。

  2. waitKey放在imshow之后。图像会显示出来。

  3. 我不知道为什么要在 imreadtest.txt 中保存leftImg。 [虽然没有出错。]

答案 1 :(得分:1)

首先,通过测试leftImg.data != 0确保图像已正确加载。

然后,您可以通过将cv::imread()CV_LOAD_IMAGE_GRAYSCALECV_LOAD_IMAGE_COLOR作为第二个参数传递来强制使用通道数,以确保加载灰度(1个通道)或颜色(3个通道)图像,无论图像文件的类型是什么。

答案 2 :(得分:1)

使用cvtColor()时,不能对输入矩阵和输出矩阵使用相同的矩阵。如果您以后不需要彩色图像,则传递副本是一个简单的解决方案:

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

另一种解决方案是使用新的输出矩阵:

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