本 [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的扩展模块了