我正在使用这个程序来阅读和显示图像。 我不知道为什么会出现这个奇怪的错误:
在未知函数中断言
(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();
}
答案 0 :(得分:3)
如其他人所述,请确保cvtColor中的parameter1不是1通道图像。按类型()检查。它应该是CV_8UC3
等等。
将waitKey
放在imshow
之后。图像会显示出来。
我不知道为什么要在 imreadtest.txt 中保存leftImg。 [虽然没有出错。]
答案 1 :(得分:1)
首先,通过测试leftImg.data != 0
确保图像已正确加载。
然后,您可以通过将cv::imread()
值CV_LOAD_IMAGE_GRAYSCALE
或CV_LOAD_IMAGE_COLOR
作为第二个参数传递来强制使用通道数,以确保加载灰度(1个通道)或颜色(3个通道)图像,无论图像文件的类型是什么。
答案 2 :(得分:1)
使用cvtColor()
时,不能对输入矩阵和输出矩阵使用相同的矩阵。如果您以后不需要彩色图像,则传递副本是一个简单的解决方案:
cvtColor(leftImg.clone(), leftImg, CV_BGR2GRAY);
另一种解决方案是使用新的输出矩阵:
Mat leftImgGray;
cvtColor(leftImg, leftImgGray, CV_BGR2GRAY);
imshow("cskldnsl",leftImgGray);