Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image OpenCV::Mat是否显示空的灰色图像?找不到原因 我只想在C++项目中显示这个“img1.jpg”图像,然后使用OpenCV LIBS做将来的处理,但是它只显示一个空灰色窗口。原因何在?。这个代码有错误吗?请帮忙_Image_Opencv - Fatal编程技术网

Image OpenCV::Mat是否显示空的灰色图像?找不到原因 我只想在C++项目中显示这个“img1.jpg”图像,然后使用OpenCV LIBS做将来的处理,但是它只显示一个空灰色窗口。原因何在?。这个代码有错误吗?请帮忙

Image OpenCV::Mat是否显示空的灰色图像?找不到原因 我只想在C++项目中显示这个“img1.jpg”图像,然后使用OpenCV LIBS做将来的处理,但是它只显示一个空灰色窗口。原因何在?。这个代码有错误吗?请帮忙,image,opencv,Image,Opencv,这是代码 Mat img1; char imagePath[256] = "img1.jpg"; img1 = imread(imagePath, CV_LOAD_IMAGE_GRAYSCALE); namedWindow("result", 1); imshow("result", img1); 谢谢…您是否导入了正确的库? 这是加载一个图像的另一种非常简单的方法: #define CV_NO_BACKWARD_COMPATIBILITY #include <cv.h>

这是代码

 Mat img1;
 char imagePath[256] = "img1.jpg";
 img1 = imread(imagePath, CV_LOAD_IMAGE_GRAYSCALE);
 namedWindow("result", 1);
 imshow("result", img1);

谢谢…

您是否导入了正确的库? 这是加载一个图像的另一种非常简单的方法:

#define CV_NO_BACKWARD_COMPATIBILITY
#include <cv.h>
#include <highgui.h>
#include <math.h>
main(){
IplImage* img  = cvLoadImage("yourPicture.jpg");
cvNamedWindow("Original", 1);
cvShowImage("Original", img);
}
#定义CV(无向后)兼容性
#包括
#包括
#包括
main(){
IplImage*img=cvLoadImage(“yourPicture.jpg”);
cvNamedWindow(“原件”,1);
cvShowImage(“原件”,img);
}
我认为您已经正确安装了openCV,因此您可以键入以下内容(Ubuntu):
g++NameOfYourProgram.cpp-o Sample-I/usr/local/include/opencv/-L/usr/local/lib-lcv-lhighgui./Sample

我遇到了同样的问题,解决了Puting
waitKey(1)
imshow()之后。OpenCV文档解释了以下原因:

此函数是HighGUI中唯一可以获取和处理 事件,因此需要为正常事件定期调用它 处理,除非在需要 关注事件处理


您遇到的问题是由于
Mat img1
的类型造成的。当您使用标志
CV\u load\u image\u GRAYSCALE
加载图像时,
Mat
的类型为0(
CV\u 8UC1
),并且函数
imshow()
无法正确显示图像。 您可以通过将
Mat
转换为16型(
CV_8UC3
)来解决此问题:

然后使用
imshow()
显示它:

我希望这能有所帮助。

谢谢@b_froz。 有关此问题的更多详细信息,请参阅:

注意:此函数后面应该是waitKey函数,它显示指定毫秒的图像。否则,它将不会显示图像。例如,waitKey(0)将无限显示窗口,直到按任意键为止(适用于图像显示)。waitKey(25)将显示一帧25毫秒,之后显示屏将自动关闭。(如果将其放入循环中以读取视频,它将逐帧显示视频)


因此,不仅
waitkey(1)
可以放在
imshow()
之后,而且
waitkey(0)
waitkey(其他整数)
之后。下面是对函数
waitkey()
的解释:

这也帮助了我-我建议将其标记为正确答案。我同意,它是有效的。我不完全理解其中的原因,但在担心我必须实现/安装一些编解码器之后,这是一种甜蜜的解脱!为了提供更多细节,我在使用OpenCV 2.3.1和Visual Studio 2008(VC90)时遇到了同样的问题,我必须插入一个waitKey(1)使其工作。
img1.convertTo(img1,CV_8UC3);
imshow("result", img1);