目录
Ⅰ、VS 中基于 C++ 的 OpenCV 环境搭建(编译源码 cmake + opencv 4.2.0 + opencv_contrib 4.2.0)
由于下载发行版无论是去 OpenCV 官网 还是 Github 都很慢,这里选择去码云下载源码并用 Cmake (官网同样很慢,这里选择去腾讯软件中心下载,搜索 cmake,选择 64 位版本,点击普通下载)编译,注意,本文是采用编译 opencv 源码的方式进行 opencv 环境的搭建,这种方式十分繁琐,类似打包发布一个跨平台 Qt 程序。如果网络允许,下载的到 opencv 安装包,解压后直接配置环境是最简单快捷的。
本机配置环境:
- win10 x64 1909
- VS 2019
- cmake-3.15.5-win64-x64
- opencv 4.2.0
- opencv_contrib 4.2.0
cmake 是跨平台的建构工具,能产生标准的建构档(如 Unix 的 Makefile),opencv 源码工程中放置已开发的稳定功能模块,opencv_contrib 中是正在开发的新特性分支。
配置流程1:
- 使用 cmake-gui 配置 opencv
- 添加 opencv_contrib,生成建构档
- 使用 vs2019 打开建构项目,编译、安装
默认 VS 已经配置好,并且上述所需文件已经下载好,下面是主要配置过程:
1-1. 安装 cmake
在下图安装选项处选择添加到系统 PATH 中,并生成桌面图标
1-2. 使用 cmake-gui 配置 opencv
- 解压 mirrors-opencv-master.zip 获得 opencv 源码,如下图:
- 使用 cmake-gui 编译 opencv:
- 一般会出现 ippicv_2019_win_intel64_20180723_general.zip opencv_videoio_ffmpeg_64.dll opencv_videoio_ffmpeg.dll 这三个文件下载不下来的情况,许多博客有谈过这个问题,解决方法并不复杂,但是需要能够畅通访问外网,比如直接去Github下载(要根据自己的版本修改 url)或者直接浏览器打开类似下面的这种网址:
https://raw.githubusercontent.com/opencv/opencv_3rdparty/自己的MD5校验码/ffmpeg/opencv_ffmpeg.dll
用下载得到的文件替换原来下载失败的文件,我的情况是下载速度十分慢,普通网络不可能成功,最终参照这篇博客2将他的两个方法结合使用,最后成功:
首先下载他的.cache
文件夹,将ippicv_2019_win_intel64_20180723_general.zip
文件前的校验码替换成自己的(因为自己所需的正好就是 20180723 这个版本)
但是之后同样的方法替换opencv_ffmpeg.dll
和opencv_ffmpeg_64.dll
没有成功,在 cmake 配置时仍然会重新下载这两个文件,这时再按照博客所述第一种方法,修改ffmpeg.cmake
文件中的下载地址,红框中改为staticdn.net
。
因为在我这里只采用第一种方式行不通,仍然会报错(下图所示情况),所以最后的解决方式有点绕弯,可能不具普遍性,如有不同,请多参考其他博客。
1-3. 添加 opencv_contrib,生成建构档
(这里也将 BUILD_opencv_world 勾选上)
这时出现 boostdesc_bgm.i 等文件和 face_landmark_model.dat 文件下载不下来的情况。
boostdesc_bgm.i 等文件参考博客3后仍未解决,问题和上面 ffmpeg 一样,即便把下好的文件拷过去,在生成的时候还是会重新下载(可能是没放对位置,应该不是大多数博客所描述的位置),这里仍然采用改变下载地址的方式得到解决,具体是将opencv_contrib解压路径\modules\xfeatures2d\cmake\
文件夹下的两个 cmake 文件中的地址改成staticdn.net
。
对于 face_landmark_model.dat 的解决方式,仍然是修改下载地址,所要修改的文件和路径是:
opencv_contrib解压路径\modules\face\CMakeLists.txt
最终会在安装目录\opencv\build
文件夹下的生成 OpenCV.sln VS 项目。
1-4. 使用vs2019打开建构项目,编译、安装
- 全部编译
在 cmake-gui 中点击 open project 或者直接打开安装目录\opencv\build
文件夹下的 OpenCV.sln 项目(可能用管理员方式打开),然后全部编译(编译出 Debug 和 Release 版本)方便之后使用:
耐心等待,这个过程十分漫长,十分吃电脑性能。 - 生成 install
- 新建空 VS 项目,使用编译好的 install 文件,配置项目环境4
(1) 添加环境变量
系统变量 Path 中添加安装目录\opencv\build\install\x64\vc16\bin
(2) 配置项目属性
(3) 测试代码5
新建源文件
测试代码:
#include "opencv2/core/utility.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include <stdio.h>
using namespace cv;
using namespace std;
int edgeThresh = 1;
Mat image, gray, edge, cedge;
// define a trackbar callback
static void onTrackbar(int, void*)
{
blur(gray, edge, Size(3, 3));
// Run the edge detector on grayscale
Canny(edge, edge, edgeThresh, edgeThresh * 3, 3);
cedge = Scalar::all(0);
image.copyTo(cedge, edge);
imshow("Edge map", cedge);
}
static void help()
{
printf("\nThis sample demonstrates Canny edge detection\n"
"Call:\n"
" /.edge [image_name -- Default is ../data/fruits.jpg]\n\n");
}
const char* keys =
{
"{help h||}{@image |../data/fruits.jpg|input image name}"
};
int main(int argc, const char** argv)
{
CommandLineParser parser(argc, argv, keys);
if (parser.has("help"))
{
help();
return 0;
}
//!!!!这里将 filename 换成你自己图片的绝对路径就可以了,只要修改这一处!!!!
string filename = "C:\\Users\\Joey\\Desktop\\ZZX\\hust.jpg";
image = imread(filename, 1);
if (image.empty())
{
printf("Cannot read image file: %s\n", filename.c_str());
help();
return -1;
}
cedge.create(image.size(), image.type());
cvtColor(image, gray, COLOR_BGR2GRAY);
// Create a window
namedWindow("Edge map", 1);
// create a toolbar
createTrackbar("Canny threshold", "Edge map", &edgeThresh, 100, onTrackbar);
// Show the image
onTrackbar(0, 0);
// Wait for a key stroke; the same function arranges events processing
waitKey(0);
system("pause");
return 0;
}
运行结果:
原图:
结果图:
Ⅱ、Anaconda 中基于 Python 的 OpenCV 环境搭建
2-1. 用 Anaconda 安装 OpenCV
默认已经安装有 Anaconda ,清华源当下是正常的,下面列举一些 conda 操作:
# 添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes
# conda 更新
conda update conda
# anaconda(升级anaconda前需要先升级conda)
conda update anaconda
# anaconda-navigator 更新
conda update anaconda-navigator
# spyder 更新
conda update spyder
# 更新所有包
conda update --all
由于之前 Anaconda 配置过很多环境,而深度学习框架更新的很快,大多数现在已经不合适了,这里重装了一次 Anaconda,直接将 OpenCV 配置在 base 环境中,可以看到 openCV 最新版是 4.2.0:
如果上面安装速度很慢,可以尝试用 conda 命令行(Anaconda Prompt)安装(可能 anaconda navigator 中使用的是官方源)
conda install libopencv=4.2.0
conda install opencv=4.2.0
conda install py-opencv=4.2.0
安装过程如下:
2-2. Pycharm 建立工程验证
我这里相当于重新配置了 Anaconda 和 Pycharm,一开始就要选择编译器,这里可以在工程设置中修改。
添加代码测试:
import cv2
import sys
if __name__ == "__main__":
# 将自己准备的图片拷贝到当前目录下
image = cv2.imread('hust.jpg', cv2.IMREAD_ANYCOLOR)
cv2.imshow("image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
注意更换编译器后需要漫长等待 Pycharm 建构项目。
构建完成后,需要配置目标文件:
运行结果:
综上,完成了 Pycharm 中 OpenCV 环境的配置。