3

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

未知函数中的断言失败(scn==3 || scn ==4),文件......\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();
}
4

3 回答 3

3
  1. 正如其他人所回答的,请确保 cvtColor 中的 parameter1 不是 1 通道图像。通过 type() 检查它。它应该是CV_8UC3等等。

  2. 放在waitKey后面imshow。图像将显示。

  3. 我不知道您为什么将 leftImg 保存在imreadtest.txt中。[虽然它没有犯错误。]

于 2013-04-12T13:28:32.053 回答
1

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

然后,您可以通过将第二个参数传递给cv::imread()该值来强制通道数,CV_LOAD_IMAGE_GRAYSCALE或者CV_LOAD_IMAGE_COLOR以确保加载灰度(1 通道)或彩色(3 通道)图像,无论图像文件的类型是什么。

于 2013-04-12T13:05:00.307 回答
1

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

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

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

Mat leftImgGray;
cvtColor(leftImg, leftImgGray, CV_BGR2GRAY);
imshow("cskldnsl",leftImgGray);
于 2013-04-12T13:09:33.060 回答