《OpenCV》Part1 OpenCV3.1.0安装配置与Qt5.5测试
来源:互联网 发布:wps for ubuntu 16.04 编辑:程序博客网 时间:2024/05/16 12:45
《OpenCV》Part1 OpenCV安装配置与Qt5.5测试
配置环境:
VS2013
Qt5.5.0
OpenCV3.1.0
cmake-3.6.1-win32-x86
1、先去OpenCV官网下载最新的opencv,现在是3.10版本。
2、下载回来的opencv3.1.0其实一个自压缩的文件,将其放在了D盘根目录下了,方便后续的编译和环境变量设置。
3、下载CMAKE,利用CMAKE建立VS的SOLUTION。可以去下载最新的CMAKE,我自己用CMAKE3.6.1,各种版本自己下个就行了,下载后点击cmake-gui.exe右键——以管理员方式运行,设置opencv的sources目录,以及生成的solutions的目录。
1)点第一次configure的时候,会弹出一个现在编译器的对话框,它会自动选择VS2013,其他的默认即可。预计几分钟后会出现下图样子;
2)实际上openCv3.1.0在CMake时是需要连国外的服务器下载相应的dll后才能编译成功的。就出现了下述的长篇大论,网上找的,不过很实用:
CMake过程中一直出现下面错误提示:
Downloading opencv_ffmpeg_64.dll...
CMake Error at cmake/OpenCVUtils.cmake:895 (file):
file DOWNLOAD HASH mismatch
for file: [D:/Program Files (x86)/opencv/sources/3rdparty/ffmpeg/downloads/35fe6ccdda6d7a04e9056b0d73b98e76/opencv_ffmpeg_64.dll]
expected hash: [35fe6ccdda6d7a04e9056b0d73b98e76]
actual hash: [f112aef8bcfad76757e2ebf06c7cf6e5]
status: [28;"Timeout was reached"]
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:15 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
CMake Error at cmake/OpenCVUtils.cmake:899 (message):
Failed to download opencv_ffmpeg_64.dll. Status=28;"Timeout was reached"
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:15 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
读一下这几行,可以大致了解如下,在编译过程中,程序下载了一个文件,它的hash值与所期待的不一致,所以导致了错误,接下来到CMakeLists.txt文件(在…...\opencv\sources)中去定位,然而看不懂。。。。。。于是去网上搜索opencv_ffmpeg_64.dll,下载至....../opencv/sources/3rdparty/ffmpeg/downloads/35fe6ccdda6d7a04e9056b0d73b98e76/下载链接:http://pan.baidu.com/s/1gfE3gHl
还是错误,不过错误提示变了:
Downloading opencv_ffmpeg.dll...
CMake Error at cmake/OpenCVUtils.cmake:895 (file):
file DOWNLOAD HASH mismatch
for file: [D:/Program Files (x86)/opencv/sources/3rdparty/ffmpeg/downloads/89c783eee1c47bfc733f08334ec2e31c/opencv_ffmpeg.dll]
expected hash: [89c783eee1c47bfc733f08334ec2e31c]
actual hash: [3de6314883587d538b4864070e0a749d]
status: [28;"Timeout was reached"]
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
CMake Error at cmake/OpenCVUtils.cmake:899 (message):
Failed to download opencv_ffmpeg.dll. Status=28;"Timeout was reached"
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:10 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:206 (include)
CMakeLists.txt:536 (include)
继续下载了一个opencv_ffmpeg.dll,替换至.../opencv/sources/3rdparty/ffmpeg/downloads/89c783eee1c47bfc733f08334ec2e31c/下载链接:http://pan.baidu.com/s/1dEAnopN
然后开始Downloading ippicv_windows_20151201.zip,我知道肯定下载不了,继续自己下载,http://pan.baidu.com/s/1c27hCT6
放到/opencv/sources/3rdparty/ippicv/downloads/windows-04e81ce5d0e329c3fbc606ae32cad44d/继续configure。。。。。。如下图,Configuring done
3)再点第二次configure,具体的勾选项可以参考下面两幅图,如果勾选后编译错误,那么勾选的选项自己就得注意点了(这时在勾选后出错的选项可以去勾选,其实configure的次数是几次是没有关系的,只要CMake时不报错,都是没有问题的),等configure完成后,再点generate,结束后会在你的输出目录里生成OpenCV.sln
注意点:
1)CMake时要注意CMAKE_INSTALL_PATH,看默认的路径是哪里,方便后面在VS2013中编译时查找OpenCV.sln文件;
2)VS2013中编译时会有Debug版和Release版,为了区分他们,肯定不能让他们的名字一模一样,所以可以在CMake界面中的Add Entry按键中添加CMAKE_DEBUG_PREFIX,类型为STRING,值为-gd,如果想编译出来的Release版的库也带后缀,同理可以自己设置值,这里略过。
4、以管理员方式用vs打开OpenCV.sln。如下图,先build ALL_BUILD的X86 DEBUG版本,然后再build CMakeTargets下面的install,完成后会生成install\x86\vc14\lib目录,将X86目录直接拷贝到opencv的build目录下。
同理编译Release版,编译完了,Install一下就好了。
5、编译后会生成很多库,但OpenCV自带的X64的为什么就只2个库呢,一个是release的opencv_world310.lib,一个是debug的opencv_world310-gd.lib。
6、将编译后的Lib库合成成一个。
我们要把自己编译的X86的合并成一个文件库,用VS自带的LIB工具。打开VS的命令行,进入到刚才的…\LIB目录下,用下面的命令把那个目录下所有不带D后缀(release版本)的先合成一个opencv-r.lib。对于生成opencv-gd.lib,也是一样的,只是把下面命令里的lib的点前面的r改为gd;中间会提示很多WARNING,全部无视。
第一步:CD D:\OpenCV3.1.0\opencvfile\lib\Debug
第二步:lib /out:opencv-gd.lib opencv_calib3d310-gd.lib opencv_calib3d310-gd.lib opencv_core310-gd.lib opencv_features2d310-gd.lib opencv_flann310-gd.lib opencv_highgui310-gd.lib opencv_imgcodecs310-gd.lib
opencv_imgproc310-gd.lib opencv_ml310-gd.lib opencv_objdetect310-gd.lib opencv_photo310-gd.lib opencv_shape310-gd.lib opencv_stitching310-gd.lib opencv_superres310-gd.lib opencv_ts310-gd.lib opencv_video310-gd.lib opencv_videoio310-gd.lib opencv_videostab310-gd.lib opencv_viz310-gd.lib
注:lib文件名提取有个小技巧,这里不再赘述,在我的VTK6.2+VS2013+Qt5.5 测试VTK基于VS2013的Qt程序
一文中有详细介绍。
下面给出Release版的lib库合成命令截图:
7、配置环境变量,此处直接上图,不多介绍,注意的地方就是debug和Release的lib和dll库路径分开:
8、配置VS,做成了一个opencv.props文件。以后要用OPENCV的工程里面加入这个文件即可。
这个可以参照我得链接里给出的文章里介绍的方法。
主要就是添加.h文件、添加.lib文件(已经合成为一个了)、添加.dll文件路径,末尾别忘了把.dll文件拷贝到系统文件夹中,否则有的时候程序是没法运行的,我的win7&64位系统路径是C:\Windows\SysWOW64,此处不再赘述了。
9、
1)VS控制台程序自己测试下就可以了,记得添加opencv.props:
#include #include #include using namespace cv; int main() { // 读入一张图片(原始图片) Mat img=imread("pic.jpg"); // 创建一个名为 "图片"窗口 namedWindow("<span style="font-family: Arial, Helvetica, sans-serif;">原始图片</span><span style="font-family: Arial, Helvetica, sans-serif;">"); </span> // 在窗口中显示<span style="font-family: Arial, Helvetica, sans-serif;">原始图片</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span> imshow("<span style="font-family: Arial, Helvetica, sans-serif;">原始图片</span><span style="font-family: Arial, Helvetica, sans-serif;">",img); </span> // 等待6000 ms后窗口自动关闭 waitKey(6000); }效果图:2)Qt5程序名QtTest,类型:application,继承窗口类QMainWindow,添加opencv.props属性表文件:
qttest.h:
#ifndef QTTEST_H#define QTTEST_H#include <QtWidgets/QMainWindow>#include "ui_qttest.h"#include <QFileDialog>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/opencv.hpp>class QtTest : public QMainWindow{Q_OBJECTpublic:QtTest(QWidget *parent = 0);~QtTest();public://void onPushButton_clicked();private:Ui::QtTestClass ui;cv::Mat image;//图像变量private slots:void onPushButton_clicked();void onPushButton_2_clicked();};#endif // QTTEST_H
qttest.cpp,有的地方与Qt4是不同的,需要留意下:
#include "qttest.h"QtTest::QtTest(QWidget *parent): QMainWindow(parent){ui.setupUi(this);ui.pushButton_2->setEnabled(false);//set process button disableconnect(ui.pushButton,SIGNAL(clicked()),this,SLOT(onPushButton_clicked()));connect(ui.pushButton_2, SIGNAL(clicked()),this,SLOT(onPushButton_2_clicked()));}QtTest::~QtTest(){}void QtTest::onPushButton_clicked(){QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),".",tr("Image Files(*.png *.jpg *.jpeg *.bmp)"));//QFileDialogimage = cv::imread(fileName.toLocal8Bit().data());//cv::namedWindow("Original Image");//cv::imshow("Original Image", image);if (image.data){cv::cvtColor(image, image, CV_BGR2RGB);//CV_BGR2RGBQImage img_orig = QImage((const unsigned char*)(image.data),//Qt image structureimage.cols, image.rows, QImage::Format_RGB888);ui.label->setPixmap(QPixmap::fromImage(img_orig));//cv::namedWindow("Original Image");//cv::imshow("Original Image",image);ui.pushButton_2->setEnabled(true);}}void QtTest::onPushButton_2_clicked(){cv::flip(image, image, 1);//process the image//cv::cvtColor(image, image, CV_BGR2RGB);//change color channel ordering//*cv::cvtColor(image,image,CV_BGR2RGB);这句如果不注释,输出的图片颜色偏黄,该句在onPushButton_clicked函数中已经变化了*//QImage img = QImage((const unsigned char*)(image.data),//Qt image structureimage.cols,image.rows,QImage::Format_RGB888);ui.label->setPixmap(QPixmap::fromImage(img));//display on lableui.label->resize(ui.label->pixmap()->size());//resize the lable to fit the image//cv::namedWindow("Output Image");//cv::imshow("Output Image", image);}
main.cpp,这个代码没有做任何更改:
#include "qttest.h"#include <QtWidgets/QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);QtTest w;w.show();return a.exec();}
运行结果:
- 《OpenCV》Part1 OpenCV3.1.0安装配置与Qt5.5测试
- QT5.8+OpenCV3.2的安装与配置
- 【Ubuntu-Opencv】Ubuntu14.04 Opencv3.3.0 安装配置及测试
- opencv3.1.0+VS2013+win7 配置与测试
- 【ubuntu+opencv3】ubuntu16.04+qt5+opencv3.2.0编译与安装
- 环境配置:Qt5.5+VS2013+OpenCv3.1.0+Win7(64bit)
- VS2013+Qt5.5+OpenCv3.1.0+Win10(64bit)安装详解
- Windows 8.1下Qt5.4 + OpenCV3.0的安装与配置
- ubuntu16.04安装opencv3.1.0+Qt5.6.0
- 安装OpenCv【OpenCv3.0+VS2015配置】
- OpenCV安装配置(VS2013+OpenCV3.0)
- OpenCV3.2+Qt5.8.0+Win10配置和使用----(4)配置环境变量+编译opencv&opencv-contrib
- qt5和opencv3在linux上安装配置
- Ubuntu14.04下Qt5+opencv3.0安装和配置
- Electron学习笔记Part1-安装与配置
- OpenCV3.1.0安装配置与OpenCV_contrib库配置
- OpenCV3.1.0安装配置与OpenCV_contrib库配置(转载)
- QT5 VS2010安装与配置
- jquery mobile界面数据刷新
- Spark快速安装与简单入门_Ubuntu14.04 64bitx
- 报错:java.util.Map is an interface, and JAXB can't handle interfaces.
- ELF Linker学习篇(四)——初始化
- js跨域的几种解决方案
- 《OpenCV》Part1 OpenCV3.1.0安装配置与Qt5.5测试
- 每日一个js实例10--回车键
- Random产生随机数,不传入种子和传入种子的区别
- Hello World!
- JSP常见编译及动作指令
- extjs renderer的参数以及对应的值
- struts1的工作原理
- 解决ldap获取数据中的objectGUID乱码问题
- html 边框变粗 margin -1px