目录

  • Ⅰ、VS 中基于 C++ 的 OpenCV 环境搭建(编译源码 cmake + opencv 4.2.0 + opencv_contrib 4.2.0)
  • 1-1. 安装 cmake
  • 1-2. 使用 cmake-gui 配置 opencv
  • 1-3. 添加 opencv_contrib,生成建构档
  • 1-4. 使用vs2019打开建构项目,编译、安装
  • Ⅱ、Anaconda 中基于 Python 的 OpenCV 环境搭建
  • 2-1. 用 Anaconda 安装 OpenCV
  • 2-2. Pycharm 建立工程验证
  • 参考文章


Ⅰ、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

  1. 使用 cmake-gui 配置 opencv
  2. 添加 opencv_contrib,生成建构档
  3. 使用 vs2019 打开建构项目,编译、安装

默认 VS 已经配置好,并且上述所需文件已经下载好,下面是主要配置过程:

1-1. 安装 cmake

在下图安装选项处选择添加到系统 PATH 中,并生成桌面图标

python 对应 opencv版本 opencv python版本和c++版本_OpenCV

1-2. 使用 cmake-gui 配置 opencv

  1. 解压 mirrors-opencv-master.zip 获得 opencv 源码,如下图:
  2. 使用 cmake-gui 编译 opencv:
  3. 一般会出现 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.dllopencv_ffmpeg_64.dll没有成功,在 cmake 配置时仍然会重新下载这两个文件,这时再按照博客所述第一种方法,修改ffmpeg.cmake文件中的下载地址,红框中改为staticdn.net

    因为在我这里只采用第一种方式行不通,仍然会报错(下图所示情况),所以最后的解决方式有点绕弯,可能不具普遍性,如有不同,请多参考其他博客。

python 对应 opencv版本 opencv python版本和c++版本_c++_02

1-3. 添加 opencv_contrib,生成建构档

(这里也将 BUILD_opencv_world 勾选上)

python 对应 opencv版本 opencv python版本和c++版本_opencv_03


这时出现 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打开建构项目,编译、安装

  1. 全部编译
    在 cmake-gui 中点击 open project 或者直接打开安装目录\opencv\build文件夹下的 OpenCV.sln 项目(可能用管理员方式打开),然后全部编译(编译出 Debug 和 Release 版本)方便之后使用:


    耐心等待,这个过程十分漫长,十分吃电脑性能。
  2. 生成 install
  3. 新建空 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;
}

运行结果:

原图:

python 对应 opencv版本 opencv python版本和c++版本_python_04


结果图:

python 对应 opencv版本 opencv python版本和c++版本_c++_05

Ⅱ、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:

python 对应 opencv版本 opencv python版本和c++版本_OpenCV_06


如果上面安装速度很慢,可以尝试用 conda 命令行(Anaconda Prompt)安装(可能 anaconda navigator 中使用的是官方源)

conda install libopencv=4.2.0
conda install opencv=4.2.0
conda install py-opencv=4.2.0

安装过程如下:

python 对应 opencv版本 opencv python版本和c++版本_c++_07

2-2. Pycharm 建立工程验证

我这里相当于重新配置了 Anaconda 和 Pycharm,一开始就要选择编译器,这里可以在工程设置中修改。

python 对应 opencv版本 opencv python版本和c++版本_OpenCV_08


添加代码测试:

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 建构项目。

构建完成后,需要配置目标文件:

python 对应 opencv版本 opencv python版本和c++版本_OpenCV_09

运行结果:

python 对应 opencv版本 opencv python版本和c++版本_python_10


综上,完成了 Pycharm 中 OpenCV 环境的配置。

参考文章


  1. (win10 + vs2019) cmake编译 (opencv4.1.0 + opencv_contrib4.1.0) ↩︎
  2. ippicv_2019_win_intel64_20180723_general.zip opencv_videoio_ffmpeg_64.dll opencv_videoio_ffmpeg.dll ↩︎
  3. 安装OpenCV时提示缺少boostdesc_bgm.i文件的问题解决方案(附带资源) ↩︎
  4. win10(x64)+vs2019+openCv4.1.0环境搭建 ↩︎
  5. Windows下 Cmake + VS 编译 OpenCV (+ opencv_contribute)源码 ↩︎