配置完opencv3.4后编译简单显示图像程序出错

sinat_41314408 2019-03-21 11:41:31
1.首先是这个程序:
#include<opencv2\opencv.hpp>
using namespace cv;
int main()
{
Mat picture = imread("wallpaper.jpg");//图片必须添加到工程目录下
//也就是和test.cpp文件放在一个文件夹下!!!
imshow("测试程序", picture);
waitKey(20150901);
}

编译时候一闪而过,没有显示图像;

2.其次是这个程序:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;

int main() {
//读取图片文件
Mat src = imread("Koala.jpg");
if (src.empty()) {
printf("文件不存在。。。");
return -1;
}
//创建一个窗口
namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);
//在窗口中显示图片
imshow("test opencv setup", src);
//在一个给定的时间内(单位ms)等待用户按键触发;如果用户没有按下 键,则接续等待(循环)
//waitKey(0)无限循环等待
waitKey(0);

return 0;
}

编译过后出现两个窗口,一个是空的,另一个显示了图像。

两段程序在编译窗口都出现了libpng warning: iCCP: known incorrect sRGB profile的问题

1. 为什么第一段程序没有显示图像?
2. 为什么第二段程序出现了两个窗口?
3. 为什么打开jpg图像也会出现libpng warning: iCCP: known incorrect sRGB profile?
有没有人能帮忙解答一下呢?
...全文
119 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WNs_ACE 2019-03-21
  • 打赏
  • 举报
回复
补充一下,第二个问题,我觉得如果还不行的话,把窗口名字的空格删除,例如下面代码这样子

char windowName[] = "testopencvsetup";
//创建一个窗口
namedWindow(windowName, CV_WINDOW_AUTOSIZE);
//在窗口中显示图片
imshow(windowName, src);
WNs_ACE 2019-03-21
  • 打赏
  • 举报
回复
第一个问题我觉得应该是waitkey的设置问题又或者是读不了图片出错了
第二个问题我觉得应该是namedWindow填写的窗口名字和imshow填写的窗口名字有所不同导致的,可以坚持一下,最好两个窗口投用同一个字符串变量,例如

char windowName[] = "test opencv setup";
//创建一个窗口
namedWindow(windowName, CV_WINDOW_AUTOSIZE);
//在窗口中显示图片
imshow(windowName, src);

第三个问题,是应为读取图片的彩色图的彩色语言协议和OpenCV默认的不一样,那OpenCV就会警告并帮我们强制转换,但是会带来一点颜色上的一点微小的错误(也可以说不一样的颜色了,但是差别会很微小)。
WNs_ACE 2019-03-21
  • 打赏
  • 举报
回复
据我的理解就是因为图片的彩色语言协议和opencv默认不一样导致的,其实如果对色彩要求不高的话或者只是学习使用的话,其实可以凑合着用,不会有太大的影响,如果你还是想解决的话,我提出2个方法吧
1,就是使用ps修改图片的彩色语言协议修改成sRGB的,然后再保存出来,再通过OpenCV加载就应该没问题了吧。
2,就是修改openCV的默认彩色语言协议,但是我记得好像没有这个地方修改了,不知道是不是我才疏学浅,所以你可以找找看,如果可以修改彩色语言协议的话,就比较好办了。
sinat_41314408 2019-03-21
  • 打赏
  • 举报
回复
引用 2 楼 WNs_ACE 的回复:
补充一下,第二个问题,我觉得如果还不行的话,把窗口名字的空格删除,例如下面代码这样子

char windowName[] = "testopencvsetup";
//创建一个窗口
namedWindow(windowName, CV_WINDOW_AUTOSIZE);
//在窗口中显示图片
imshow(windowName, src);

在网上基本都是载入png格式的图像才会出现这个警告,但是我使用的图像只是普通的jpg格式的
sinat_41314408 2019-03-21
  • 打赏
  • 举报
回复
引用 2 楼 WNs_ACE 的回复:
补充一下,第二个问题,我觉得如果还不行的话,把窗口名字的空格删除,例如下面代码这样子

char windowName[] = "testopencvsetup";
//创建一个窗口
namedWindow(windowName, CV_WINDOW_AUTOSIZE);
//在窗口中显示图片
imshow(windowName, src);

非常感谢您的回复,那第三个问题请问有什么解决办法吗?在网上找了一下,都是QT才会出现这样的错误,VS或者opencv上这个问题的解决方法很少,再次麻烦,谢谢

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧