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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章