前言
使用opencv有三种方法(目前我知道的)
- 直接在终端pip install opencv-python但是我们用C++,这个就不适用了
- 直接在官网用它已经编译好了的,但是他不包含额外的库,比如人脸识别(这是在额外的库opencv_contrib里)下载地址
- 拉取源码,自己cmake编译,然后生成解决方案,再install生成可用的库(可定制化,cmake过程中可勾选WITH_QT,WITH_OPENGL)OpenCV (github.com)
今天我采用的就是第三种
拉取源码后的构建和编译方式:
构建使用cmake工具
编译(二选一):
1. 使用vs studio,这个就属于msvc环境编译源码
2. 使用mingw进行编译
拉取源码
我已经从Github将源码拷贝下来了:
链接: https://pan.baidu.com/s/1RDdrhjWxAvewmyjXIjHseA?pwd=53hy 提取码: 53hy 复制这段内容后打开百度网盘手机App,操作更方便哦
在opencv历史版本里找到我们今天要用的版本4.9.0
opencv_contrib同理。
从github下拉取完源码之后:
CMake构建
下载安装cmake(几分钟就好了)下载地址(我的电脑是64位,windows系统的)
源码地址就是opencv的地址
目标地址就是我们一开始建的空文件夹,cmake之后会构建
点击configue,默认信息一路过着(有梯子这之后就打开着)
然后在这个框框里将Opencv_world勾选上(这里提一嘴,opencv_world这个库,在之后我们自己的项目里使用opencv的时候附加依赖项就可以简化只导入它一个就非常方便,这样我们不用把所有的lib一一写进去了)
第二行填上我们额外的库的路径地址以及把它上面那个勾选上
继续generate
Visual Studio编译(msvc环境)
然后去到我们新建的opencv-build文件夹里找到.sln的文件点击(自动vs studio打开)
然后可以看到:
一般这边就会开始报错了,可能是cmake阶段该下载的没下载(没梯子),用我分享的网盘的download下的文件,按照日志文件(CMakeDownLoadLog.txt)里的内容进行补充
比如将download解压,按照日志文件(CMakeDownLoadLog.txt)的内容找到对应缺失的文件地址复制粘贴带它对应的位置上去(大概要缺失了十几项的样子,日志文件里它也提供了下载地址但是需要梯子才能顺利下载,不然就直接用dowmload里的(百度网盘上面提供了))
另外一种补充方式,还可以在opencv源码文件下新建一个.cache文件夹存放没有下载的(我上面提供的百度网盘里有),这样也能找到,都可以试试
继续——————重新右击生成解决方案,这个时候没报错就行,这里解释一下“生成解决方案”和重新生成解决方案,前者是更新不一样的地方,后者从头来过,所以耗费时间更久。最后找到CMakeTargets下的INSTALL右击仅该项目仅生成,这样就是inatll库成功啦
install下的文件就和官网提供的差不多啦,不过我们是有额外库的内容(有人脸识别)
release模式下的我们就弄好了,顺便更改为debug模式,再来一遍
这部分编译过程会遇到很多问题,不过百度看看咯能不能解决,有些时候就很莫名其妙,这里改改那里改改它就好了,可能也不是什么重要东西吧。。。不管他了
MinGW编译
查看自己gcc的版本 下载地址(mingw)
到opencv的源码路径下打开终端命令行依次输入:
mingw32-make -j8
mingw32-make install
最后在opencv-build下的install:
项目测试【人脸检测】(msvc编译)
引入我们编译好的opencv库,前面分享的百度网盘里我有已经建立一个demo测试项目可以拿来直接用,不过就是图片地址得按照你们的改改
在项目中引入opencv库
最重要的是把opencv_world这个添加到位
最后修改一下相对于你们项目中图片的路径地址
测试结果:
项目测试2【访问摄像头】(MinGW编译)
使用clion编辑器新建一个项目(C++17环境),将编译好的install文件下的include和x64文件放到项目目录下:
main.cpp
#include <iostream>
#include "opencv2/opencv.hpp"
int main() {
std::cout << "Hello, World!" << std::endl;
cv::VideoCapture cap(0);
while (cap.isOpened()) {
cv::Mat frame;
cap >> frame;
if (!frame.empty()) {
cv::imshow("image", frame);
cv::waitKey(100);
}
}
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.29)
project(testopencv)
set(CMAKE_CXX_STANDARD 17)
include_directories(./include)
link_directories(./x64/lib)
add_executable(testopencv main.cpp)
target_link_libraries(testopencv D:/project/testopencv/x64/mingw/lib/libopencv_world470.dll.a)
测试摄像头:
以上就是我一步一步编译到测试的过程,很多过程图片当时编译的时候没有截,还不够细致。有问题可留言,大家一起沟通进步~
参考文档:
opencv源码编译及配置完整版教程(win10+vs2019+opencv-4.4.0+opencv_contrib-4.4.0)_、 .4 ,vcvedv-CSDN博客
windows编译opencv+opencv_contrib 以及解决cmake下载boostdesc_bgm等文件失败问题_cmake下载失败-CSDN博客