OpenCV读取图片在Qt界面中显示

OpenCV包含了大量的机器视觉处理算法,Qt具有良好的交互界面优势。通过OpenCV完成底层算法,用Qt完成上层的应用接口OpenCV与Qt就是这样的完美组合。前面经过对Qt近两周的学习,算是对Qt有个小小认识,想着边学边做,把opencv也用起来,就有了这篇文章,其实现思路网上很多博友都已经说过,这里就总结一下思路:

1. Mat Image  = cv::imread…… //opencv读取图像;

2.opencv图像数据类型Mat,转换成Qt的QImage;(Ps:opencv的图像三基色通道的顺序是BGR,要先把BGR转换成RGB)

3.采用Qt中QLabel显示图像。(QLabel的功能就是提供一个文本或图像的显示)

看起来是很简单的一个过程,但是在编译时就有如下错误

D:\Qtdemo\openImage\mainwindow.cpp:32: error: undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'

google搜索了很多,总结有两种解决办法

1. For openCV 3.X you need to add library imgcodecs to project  就是说opencv3以上的图像编解码是imgcodecs负责,要包含这个lib文件

2. 在CMakeLists.txt加入安装OpenCV的版本号: 将

find_package(OpenCV REQUIRED) 

更改为

find_package(OpenCV 3  REQUIRED)
https://blog.csdn.net/WhiteLiu/article/details/72901520 该文作者认为:是之前链接过2.4的库,新装3以后,还在原来的位置找,找不到,这时候加上3就可以找到了。

在.pro中,我是把所有lib文件都添加了的,那么很可能就是2了,但是我在source中找到CMakeLists.txt,其中查找并没有“find_package( OpenCV REQUIRED )”这一栏

然后看了其他的一些方法,比如把CMakeLists.txt中VERSION修改成3.2.0(我装的opencv版本是3.2.0)

然后还参考一个博客https://blog.csdn.net/u013704336/article/details/53716795

把 新目录D:\QtOpenCV中 的 build 从 1) 替换成 2)                                

       1)opencv 解压缩的include                                           2)  CMake编译成功创建的目标路径中的include

                 

最后重启电脑,打开这个工程,运行,依然是同样的错误!此时我已经是一个头两个大了,求教于xx ,只把

image = cv::imread(fileName.toUtf8().data());

这行代码中的cv::去掉(因为我前面定义了 using namespace cv),运行,竟然就可以了!

我说这样就可以了?!然后我把using namespace cv去掉,重新加上cv:: 也是可以的!这。。。太奇怪了。。花了大半天没解决,这样就解决了,xx似乎不惊讶,说不定程序自身也是有"bug"吧。

真的是不可思议,我姑且认为:前面所做的都没有白费。

最后贴上运行的结果!

看到还有提供QLabel 和 QGraphicsView 两种切换方式显示图片,所以自己也试了下,

QStackedWidget 提供了多页面的切换布局,一次只能看到一个界面
ui->stackedWidget->setCurrentIndex(0);
ui->stackedWidget->setCurrentIndex(1);

GraphicsView显示效果,水平的滚动条没有显示出来,应该进行显示设置,效果会更好。

猜你喜欢

转载自blog.csdn.net/naozhuo0615/article/details/81977541