OpenCV开发笔记(三十四):红胖子带你小白式编译Qt+openCV3.4.1+opencv_contrib(全网最简单最强,可读性最高,没有之一)

若该文为原创文章,未经允许不得转载
原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/104953532
各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究

目录

前言

版本汇总

打包集合下载地址:

下载地址

OpenCV+opencv_contrib编译

步骤一:解压到编译文件夹

步骤二:CMake配置configure第一次

步骤三:CMake配置configure第二次

步骤四:Generate生成工程

步骤五:命令行编译

步骤六:缺少文件

步骤七:编译成功

步骤八:install安装,方便抽取库

步骤九:检查库

模块化与测试

勾选world后libopencv_world341.dll模块化

编译opencv_contrib的模块化

测试opencv_contrib的Demo

Demo源码

工程模板:对应版本号v1.29.0

入坑

入坑一:编译opencv添加opencv_contrib失败


OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境

OpenCV开发笔记(一):OpenCV介绍、编译

OpenCV开发笔记(二):cvui交互界面

OpenCV开发笔记(三):OpenCV图像的概念和基本操作

OpenCV开发笔记(四):OpenCV图片和视频数据的读取与存储

OpenCV开发笔记(五):OpenCV读取与操作摄像头

OpenCV开发笔记(六):OpenCV基础数据结构、颜色转换函数和颜色空间

OpenCV开发笔记(七):OpenCV基础图形绘制

OpenCV开发笔记(八):OpenCV常用操作之计时、缩放、旋转、镜像

OpenCV开发笔记(九):OpenCV区域图像(ROI)和整体、局部图像混合

OpenCV开发笔记十):OpenCV图像颜色通道分离和图像颜色多通道混合

OpenCV开发笔记(十一):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-mingw32编译

OpenCV开发笔记(十二):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-msvc2015编译(opencv3.4.0、cuda9.0、VS2015)

OpenCV开发笔记(十三):OpenCV图像对比度、亮度的调整

OpenCV开发笔记(十四):算法基础之线性滤波-方框滤波

OpenCV开发笔记(十五):算法基础之线性滤波-均值滤波

OpenCV开发笔记(十六):算法基础之线性滤波-高斯滤波

OpenCV开发笔记(十七):算法基础之线性滤波对比-方框、均值、高斯滤波

OpenCV开发笔记(十八):算法基础之非线性滤波-中值滤波

OpenCV开发笔记(十九):算法基础之非线性滤波-双边滤波

OpenCV开发笔记(二十):算法基础之非线性滤波对比-中值、双边滤波

OpenCV开发笔记(二十):算法基础之形态学滤波-膨胀

OpenCV开发笔记(二十):算法基础之形态学滤波-腐蚀

OpenCV开发笔记(二十):算法基础之形态学滤波-开运算

OpenCV开发笔记(二十):算法基础之形态学滤波-闭运算

OpenCV开发笔记(二十):算法基础之形态学滤波-形态学梯度

OpenCV开发笔记(二十):算法基础之形态学滤波-顶帽(礼帽)

OpenCV开发笔记(二十):算法基础之形态学滤波-黑帽

OpenCV开发笔记(二十八):带你学习图像识别之阈值化

OpenCV开发笔记(二十九):带你学习图像识别之自适应阈值

OpenCV开发笔记(三十):带你学习图像识别之经典OTSU算法阈值化

OpenCV开发笔记(三十一):红胖子8分钟带你深入了解双阈值化(图文并貌+浅显易懂+程序源码)

OpenCV开发笔记(三十二):红胖子8分钟带你深入解半阈值化(图文并貌+浅显易懂+程序源码)

OpenCV开发笔记(三十三):红胖子8分钟带你深入了解漫水填充算法(图文并茂+浅显易懂+程序源码)

OpenCV开发笔记(三十四):红胖子带你小白式编译Qt+openCV3.4.1+opencv_contrib(全网最简单最强,可读性最高,没有之一)

持续补充中…

 

    OpenCV开发笔记(三十四):红胖子带你小白式编译Qt+openCV3.4.1+opencv_contrib(全网最简单最强,可读性最高,没有之一)

前言

       红胖子来也!!!

       opencv_contrib是opencv提供额外的工具,提供一些基础算法,之前编译了不带opencv_contrib的版本,不带opencv_contrib的cuda硬加速版本,缺一个opencv+contrib的版本。

 

版本汇总

  • Qt5.2.0 mingw32 + Opencv2.4.10 版本

OpenCV开发笔记(〇):使用mingw530_32编译openCV3.4.1源码,搭建Qt5.9.3的openCV开发环境

  • Qt5.9.3 mingw32 + Opencv3.4.1 版本

OpenCV开发笔记(一):OpenCV介绍、编译

  • Opencv3.4.0 + cuda9.0 + VS2015版本

OpenCV开发笔记(十二):OpenCV编译支持Gpu(cuda) 加速开发之win-qt-msvc2015编译(opencv3.4.0、cuda9.0、VS2015)

  • Opencv3.4.1 + opencv_contrib3.4.1 + Qt5.9.3 mingw32版本(本篇编译)

打包集合下载地址:

       https://download.csdn.net/download/qq21497936/12255080

 

下载地址

       Github还真难下,各种网关设置还是是慢,所以,提供下载地址如下:

       https://download.csdn.net/download/qq21497936/12253553

 

OpenCV+opencv_contrib编译

步骤一:解压到编译文件夹

      

步骤二:CMake配置configure第一次

       (注意:可能会卡住,因为网络不好,默认勾选一些库,如ffmpeg,cmake自己会下载)

       只设置2个路径,configure一次,上面是路径,下面试配置的时候选择mingw make相关,并指定编译器,然后configure如下图:

步骤三:CMake配置configure第二次

       添加opencv_contrib,如下图:

       此处勾opencv_world,这样工程就只需要包含一个库文件(特别注意:添加opencv_contrib不要勾选,会出现链接错误,请查看入坑一),如下图,就主动不勾选了,默认为不勾选:

       配置With_Qt,With_OPENGL,如下图:

       配置一下,会在出现几个变量,更改如下图:

       需要支持c++11,如下图:

       找到源码modules\videoio\src\cap_dshow.cpp,搜索#include “DShow.h”,添加宏定义:

步骤四:Generate生成工程

步骤五:命令行编译

       漫长的等待。

步骤六:缺少文件

       缺少如下文件,请自己下载,提供csdn地址:

       https://download.csdn.net/download/qq21497936/12253633

       注意:你可以自己装个openssl软件,然后就可以了下载到了,提供OpenSSL的下载地址:

       https://download.csdn.net/download/qq21497936/12254468

成功下载:

放入对应目录。

步骤七:编译成功

       (未勾选world,库都是分开的)

(勾选world,加入opencv_contrib失败)

步骤八:install安装,方便抽取库

       (未勾选world,库都是分开的)

步骤九:检查库

 

模块化与测试

勾选world后libopencv_world341.dll模块化

       请参照博文《OpenCV开发笔记(一):OpenCV介绍、编译》就行模块化封装与测试,该博文中也有一些入坑,本博客本质与其差不多,只是添加了opencv_contrib的支持。

       往下图片这是world版本的模块化处理,但是添加了opencv _contrib无法编译成world模块,所以一下这个只是对于《OpenCV开发笔记(一):OpenCV介绍、编译》使用world编译项的补充。

编译opencv_contrib的模块化

       那么还是按照之前的:

       笔者直接替换之前的库,再讲opencv_contrib相关的库加入工程文件,形成工程模板v1.29.0。

       新的测试程序,测试是否加入opencv_contrib。

# 带opencv_contrib的非world版本
LIBS += \
    -lopencv_calib3d341 \
    -lopencv_ccalib341 \
    -lopencv_core341 \
    -lopencv_cvv341 \
    -lopencv_datasets341 \
    -lopencv_dnn_objdetect341 \
    -lopencv_dnn341 \
    -lopencv_dpm341 \
    -lopencv_face341 \
    -lopencv_features2d341 \
    -lopencv_flann341 \
    -lopencv_fuzzy341 \
    -lopencv_hfs341 \
    -lopencv_highgui341 \
    -lopencv_img_hash341 \
    -lopencv_imgcodecs341 \
    -lopencv_imgproc341 \
    -lopencv_line_descriptor341 \
    -lopencv_ml341 \
    -lopencv_objdetect341 \
    -lopencv_optflow341 \
    -lopencv_phase_unwrapping341 \
    -lopencv_photo341 \
    -lopencv_plot341 \
    -lopencv_reg341 \
    -lopencv_rgbd341 \
    -lopencv_saliency341 \
    -lopencv_shape341 \
    -lopencv_stereo341 \
    -lopencv_stitching341 \
    -lopencv_structured_light341 \
    -lopencv_superres341 \
    -lopencv_surface_matching341 \
    -lopencv_text341 \
    -lopencv_tracking341 \
    -lopencv_video341 \
    -lopencv_videoio341 \
    -lopencv_videostab341 \
    -lopencv_xfeatures2d341 \
    -lopencv_ximgproc341 \
    -lopencv_xobjdetect341 \
    -lopencv_xphoto341 \
    -lopencv_ffmpeg341 \
    -lopencv_aruco341 \
    -lopencv_bgsegm341 \
    -lopencv_bioinspired341

 

测试opencv_contrib的Demo

使用了opencv_contrib中的三种白平衡验证。

 

Demo源码

void OpenCVManager::testContrib()
{
    QString fileName1 = "D:/qtProject/openCVDemo/openCVDemo/modules/openCVManager/images/1.jpg";
    cv::Mat srcMat = cv::imread(fileName1.toStdString());

    int width = 300;
    int height = 200;
    cv::resize(srcMat, srcMat, cv::Size(width, height));

    cv::String windowName = _windowTitle.toStdString();
    cvui::init(windowName);

    cv::Mat windowMat = cv::Mat(cv::Size(srcMat.cols * 3, srcMat.rows * 2),
                                srcMat.type());

    cv::Ptr<cv::xphoto::SimpleWB> pSimpleWB = cv::xphoto::createSimpleWB();
    cv::Ptr<cv::xphoto::GrayworldWB> pGrayworldWB = cv::xphoto::createGrayworldWB();
    cv::Ptr<cv::xphoto::LearningBasedWB> pLearningBasedWB = cv::xphoto::createLearningBasedWB();

    while(true)
    {
        windowMat = cv::Scalar(0, 0, 0);
        // 原图先copy到左边
        cv::Mat leftMat = windowMat(cv::Range(0, srcMat.rows),
                                    cv::Range(0, srcMat.cols));
        cv::addWeighted(leftMat, 0.0f, srcMat, 1.0f, 0.0f, leftMat);

        cv::Mat dstMat;
        // 白平衡
        pSimpleWB->balanceWhite(srcMat, dstMat);
        // 白平衡的图copy到左下
        cv::Mat leftBottomMat = windowMat(cv::Range(srcMat.rows, srcMat.rows * 2),
                                          cv::Range(0, srcMat.cols));
        cv::addWeighted(leftBottomMat, 0.0f, dstMat, 1.0f, 0.0f, leftBottomMat);

        // 白平衡
        pGrayworldWB->balanceWhite(srcMat, dstMat);
        // 白平衡的图copy到左下
        cv::Mat rightBottomMat = windowMat(cv::Range(srcMat.rows, srcMat.rows * 2),
                                           cv::Range(srcMat.cols, srcMat.cols * 2));
        cv::addWeighted(rightBottomMat, 0.0f, dstMat, 1.0f, 0.0f, rightBottomMat);

        // 白平衡
        pLearningBasedWB->balanceWhite(srcMat, dstMat);
        // 白平衡的图copy到左下
        cv::Mat rightBottomMat2 = windowMat(cv::Range(srcMat.rows, srcMat.rows * 2),
                                            cv::Range(srcMat.cols * 2, srcMat.cols * 3));
        cv::addWeighted(rightBottomMat2, 0.0f, dstMat, 1.0f, 0.0f, rightBottomMat2);

        // 更新
        cvui::update();
        // 显示
        cv::imshow(windowName, windowMat);
        // esc键退出
        if(cv::waitKey(25) == 27)
        {
            break;
        }
    }
}

 

工程模板:对应版本号v1.29.0

       对应版本号v1.29.0

 

入坑

入坑一:编译opencv添加opencv_contrib失败

原因:

       编译成一个world的dll,CMake中未包含opencv_contrib部分的兼容。

解决方法:

       不勾选,只能分多个dll。


原博主博客地址:https://blog.csdn.net/qq21497936
原博主博客导航:https://blog.csdn.net/qq21497936/article/details/102478062
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/104953532

发布了253 篇原创文章 · 获赞 326 · 访问量 48万+

猜你喜欢

转载自blog.csdn.net/qq21497936/article/details/104953532
今日推荐