windows编译使用opencv3.4.1扩展模块

[Blog]目录如下:

0、简介

该篇blog主要在windows下用vs2015重新编译opencv3.4.1

从官网下载的opencv不包含扩展模块,同时不支持python3调用(只给出来python2的)

发现opencv3.4.1不能用vs2017的社区版来安装,只能退回vs2015

所以,摘要为:

  • Windows下使用vs2015编译opencv3.4.1
  • python3调用opencv3.4.1
  • C++调用opencv3.4.1扩展模块
  • python3调用opencv3.4.1扩展模块

1、下载opencv3.4.1

从官网下载

下载扩展模块

下载后得到的目录存放如下
这里写图片描述


2、cmake中打开

这里写图片描述
第一行输入sources目录,第二行是填入生成vs项目的目录,配置好之后点击Configure
这里写图片描述
结束后执行Generate


3、配置opencv中扩展模块路径

search中输入extra
输入路径C:/opencv34/opencv_contrib-master/modules
这里写图片描述
顺便配置一下python3,方便得到.pyd文件,在python中使用
这里写图片描述
anaconda中的python会自动被发现

设定完成后,点Configure,这步比较久,要下载很多的模型文件
这里写图片描述
点击Genera生成解决vs项目
这里写图片描述


4、vs2015打开opencv项目

选择编译解决方案
release直接编译,debug的编译就不加python或者略过编译python的错误
这里写图片描述
同理release的也是一样的生成

如果不打算在c++中调试代码,只是打算在python中使用,那么可以只生成release版本


5、c++测试使用opencv中的扩展模块

打开vs输入如下代码

// opencv.cpp : 定义控制台应用程序的入口点。
//

#include <stdio.h>
#include <iostream>
#include "opencv2/core.hpp"
#include "opencv2/features2d.hpp"
#include "opencv2/xfeatures2d.hpp"
#include "opencv2/highgui.hpp"

using namespace cv;
using namespace cv::xfeatures2d;
using namespace std;


int main() {
    Mat img_1 = imread("face.jpg", IMREAD_GRAYSCALE);
    if (img_1.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    imshow("input image", img_1);

    int minHessian = 400;
    Ptr<SURF> detector = SURF::create(minHessian);
    vector<KeyPoint> keypoints;
    detector->detect(img_1, keypoints);

    Mat img_keypoints1;
    drawKeypoints(img_1, keypoints, img_keypoints1, Scalar::all(-1), DrawMatchesFlags::DEFAULT);
    namedWindow("key points", CV_WINDOW_AUTOSIZE);
    imshow("key points", img_keypoints1);

    waitKey(0);
    return 0;
}

X64平台,需要配置头文件:
C:\opencv\opencv_contrib-master\modules\xfeatures2d\include;C:\opencv\build\include;C:\opencv\build\include\opencv;C:\opencv\build\include\opencv2

库目录:
C:\opencv34\lib\Debug;

附加依赖项加入如下:
opencv_calib3d341d.lib;opencv_core341d.lib;opencv_features2d341d.lib;opencv_flann341d.lib;opencv_highgui341d.lib;opencv_imgcodecs341d.lib;opencv_imgproc341d.lib;opencv_ml341d.lib;opencv_objdetect341d.lib;opencv_photo341d.lib;opencv_shape341d.lib;opencv_stitching341d.lib;opencv_superres341d.lib;opencv_ts341d.lib;opencv_video341d.lib;opencv_videoio341d.lib;opencv_videostab341d.lib;opencv_xfeatures2d341d.lib;opencv_xobjdetect341d.lib;%(AdditionalDependencies)

环境变量需要添加对应的opencv dll的目录

运行一下可以看到效果
这里写图片描述
说明,c++已经能正常使用opencv的扩展模块了


5、python3中测试使用opencv

将编译出来的\lib\python3\Release下的.pyd文件存放到 python安装目录Lib\site-packages下,并重命名为cv2.pyd
这里写图片描述
配置环境变量,加入dll的路径C:\opencv\build\x64\myvc14\bin\Release
这里写图片描述
启动pycharm,使用如下测试代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cv2 as cv
if __name__ == '__main__':
    print("main")
    # 读取图像,支持 bmp、jpg、png、tiff 等常用格式
    img = cv.imread("test.jpg")
    # 创建窗口并显示图像
    cv.namedWindow("Image")
    cv.imshow("Image", img)
    cv.waitKey(0)
    # 释放窗口
    cv.destroyAllWindows()

运行后看到如下效果,证明python3已经可以使用opencv了
这里写图片描述
用python使用opencv的扩展模块,主要是使用xfeatures2d模块,使用如下代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cv2 as cv
if __name__ == '__main__':
    print("main")
    img = cv.imread('face.jpg')
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    surf = cv.xfeatures2d.SURF_create()
    kp = surf.detect(gray, None)
    img = cv.drawKeypoints(gray, kp, img)
    cv.imshow("img", img)
    k = cv.waitKey(0)
    if k & 0xff == 27:
        cv.destroyAllWindows()

可以看到效果
这里写图片描述
说明,python已经能正常使用opencv的扩展模块了

猜你喜欢

转载自blog.csdn.net/zengraoli/article/details/79853921