OPENCV4 OPENCV_CONTRIB FOR MAC CMAKE安装

一开始网上搜了一些 “安装教程” , 很多是误导新人,所以写了篇 经过个人实践没有问题的流程,以供大家参考:

先上电脑配置:

 

 

  • 首先下载opencv的源码以及opencv_contrib(如果需要用到SURF/SIFT等功能),我已经下载好打包
    • 链接: https://pan.baidu.com/s/1BPL1gTvzL5OZgLtFHUoi5A  密码: 4s77
  • 其次下载过程中会用到的一些第三方的东西,如IPPICV
    • 链接:链接: https://pan.baidu.com/s/1ExZyhdHXicoMWLioE6NTpQ  密码: viko
  • 编译工具cmake: https://cmake.org/download/
  • 下面开始干活:
    1. 解压opencv4和opencv_3rdparty-ippicv-master_20191018,最好是放在同一目录下
    2. 把boost一堆解压到src目录(这一步可能需要配置目录)
    3. 把IPPICV放到/opencv/3rdparty/ippicv目录下
    4. 修改opencv/3rdparty/ippicv/ippicv.cmake文件,用sublime 之类的工具打开,找到第42行修改为它的绝对目录,例如我的就是
    5. 除了上面以外还有一个文件一般会下载失败,就是face_landmark_modet.dat文件,下载链接如下链接: https://pan.baidu.com/s/1zZOXfYqK9nzj5D_TOIDyIQ  密码: gwaw,拷贝到然后/opencv_contrib/modules/face/目录并修改修改/opencv_contrib/modules/face/CmakeList.txt中的第19行,结果如下
    6. 基本配置完毕,下面开始配置编译选项,需要把opencv_contrib也编译进去,然后生成相应的库文件以及头文件
    7. cd opencv
      mkdir build
      cd build
      cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE:BOOL=ON ..
      

      等待没有错误的完成

    8. 然后

      make -j12

      一直等到完成

    9. 然后

      sudo make install

      等待完成。

  • 代码示例:

  • 
    #include <opencv2/opencv.hpp>
    #include <opencv2/highgui.hpp>
    #include <opencv2/xfeatures2d.hpp>
    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    
    
    void orbFeatures(cv::Mat &matGray, vector<cv::KeyPoint> &keyPoints, cv::Mat & descripton){
        cv::Ptr<cv::ORB> orb = cv::ORB::create(100, 1.2f);
        orb->detect(matGray, keyPoints);
        orb->compute(matGray, keyPoints, descripton);
    }
    
    int main(){
    
    #if 1
        cv::Mat imgSrcA = cv::imread("/Users/cairne/Desktop/desktop/cats.jpeg",cv::IMREAD_COLOR);
        cv::Mat imgSrcB = cv::imread("/Users/cairne/Desktop/desktop/mycata.png", cv::IMREAD_COLOR);
        if(imgSrcA.empty() || imgSrcB.empty()){
            cout << "Please check you Pics path ! " << endl;
            return -1;
        }
        cv::Ptr<cv::xfeatures2d::SURF> mySurf = cv::xfeatures2d::SURF::create();
        std::vector<cv::KeyPoint> myKeypointA, myKeypointB;
    
        mySurf->detect(imgSrcA, myKeypointA);
        mySurf->detect(imgSrcB, myKeypointB);
    
        cv::Mat keyPointImgA, keyPointImgB;
        cv::drawKeypoints(imgSrcA, myKeypointA, keyPointImgA, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
        cv::drawKeypoints(imgSrcB, myKeypointB, keyPointImgB, cv::Scalar::all(-1), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
        cv::namedWindow("KeyPoints of imgA");
        cv::namedWindow("KeyPoints of imgB");
    
        cv::imshow("KeyPoints of imgA", keyPointImgA);
        cv::imshow("KeyPoints of imgB", keyPointImgB);
    
        cv::Mat disA, disB;
        mySurf->detectAndCompute(imgSrcA, cv::Mat(), myKeypointA, disA);
        mySurf->detectAndCompute(imgSrcB, cv::Mat(), myKeypointB, disB);
    
        
        std::vector<cv::DMatch> myMatches;
    
        if(disA.type() != CV_32F || disB.type() != CV_32F){
            disA.convertTo(disA, CV_32F);
            disB.convertTo(disB, CV_32F);
        }
    
        cv::Ptr<cv::DescriptorMatcher> myMatcher = cv::DescriptorMatcher::create("FlannBased");
        myMatcher->match(disA, disB, myMatches);
    
        double maxDist = 0;
        for(int i = 0; i < disA.rows; i++){
            double dist = myMatches[i].distance;
            if(dist > maxDist)
                maxDist = dist;
        }
        cout << "max dis : " << maxDist << endl;
        std::vector<cv::DMatch> goodMatches;
        for(int i = 0; i < disA.rows; i++){
            //cout << myMatches[i].distance << " ";
            if(myMatches[i].distance < 0.1 * maxDist)
                goodMatches.push_back(myMatches[i]);
        }
        cout << endl;
        cv::Mat imageOut;
        cv::drawMatches(imgSrcA, myKeypointA, imgSrcB, myKeypointB, goodMatches, imageOut);
        cv::imshow("Picture of matching", imageOut);
    #endif 
    
    #if 0
        cv::Mat myImgA, myImgB;
        myImgA = cv::imread("/Users/cairne/Desktop/desktop/aaaaa.png", cv::IMREAD_COLOR);
        myImgB = cv::imread("/Users/cairne/Desktop/desktop/bbbbd.png", cv::IMREAD_COLOR);
        if(myImgA.empty() || myImgB.empty()){
            cout << "Please check you pictures!" << endl;
            return -1;
        }
    
        vector<cv::KeyPoint> keyPointsA, keyPointsB;
        cv::Mat desA, desB;
    
        orbFeatures(myImgA, keyPointsA, desA);
        orbFeatures(myImgB, keyPointsB, desB);
    
        vector<cv::DMatch> matches;
        cv::BFMatcher matcher(cv::NORM_HAMMING);
        matcher.match(desA, desB, matches);
        cout << "Matches = " << matches.size() << endl;
    
        double minDist = 1000, maxDist = 0;
        for(int i = 0; i < matches.size(); i++){
            double dist = matches[i].distance;
            if(dist < minDist)
                minDist = dist;
            if(dist > maxDist)
                maxDist =dist;
        }
        cout << "min dist = " << minDist << endl;
        cout << "max dist = " << maxDist << endl;
    
        vector<cv::DMatch> goodMatches;
        for(int i = 0; i < matches.size(); i++){
            cout << matches[i].distance << " " ;
            if(matches[i].distance <= max(2 * minDist, 40.0)){
                goodMatches.push_back(matches[i]);
            }
        }
        cout << endl;
        cout << "good match min = " << goodMatches.size() << endl;
    
        cv::Mat outImgA, outImgB;
        cv::drawMatches(myImgA, keyPointsA, myImgB, keyPointsB, matches, outImgA);
        cv::drawMatches(myImgA, keyPointsA, myImgB, keyPointsB, goodMatches, outImgB);
    
    
        cv::imshow("without filter", outImgA);
        cv::imshow("with filter", outImgB);
    #endif
    
        char myWaitKey = cv::waitKey();
        if(myWaitKey == 'q' || myWaitKey == 'Q'){
            cout << "End of program ! " << endl;
            return 0;
        }
    }
    

    结果展示

    1.  

 

 

另外关于OPENCV与VSCODE的配置问题,请参考别的大神的教程。

  •  
在配置VSCode和OpenCV之前,你需要完成以下几个步骤: 1. 配置VSCode的C/C++编译环境。你可以按照\[1\]中的步骤进行配置。 2. 下载CMake编译程序。你可以从CMake官网下载适合你操作系统的版本。 3. 使用CMake程序编译已下载好的OpenCV库。你可以按照\[1\]中的步骤进行编译。 4. 配置VSCode以使用OpenCV库。你可以按照\[1\]中的步骤进行配置。 5. 创建一个新的文件,命名为"opencvtest.cpp",并将\[2\]中的代码复制到该文件中。 6. 修改代码中的图片路径为你自己的图片路径。 7. 运行测试程序。你可以按照\[1\]中的步骤进行运行。 这样,你就完成了在VSCode中配置OpenCV的过程。如果你需要更详细的步骤和说明,可以参考\[3\]中提供的链接。希望对你有帮助! #### 引用[.reference_title] - *1* [记录一下自己vscode + opencv配置过程](https://blog.csdn.net/HadesDR/article/details/126877655)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Vscode Opencv4.5.2环境搭建](https://blog.csdn.net/C_say_easy_to_me/article/details/123582066)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [vscode配置opencv](https://blog.csdn.net/Wddfh_frw/article/details/123762213)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值