C++ OpenCV安装教程
C++ OpenCV编译安装教程
环境说明
win10 + MinGW64 + Cmake
下载mingw64 (版本:12.1.0 posix-seh)
下载Cmake (版本3.17.5)
注:mingw64和cmake下载安装完成后记得把bin目录添加到【环境变量】,如:
下载opencv (版本4.6.0,下载后双击exe,选择目录进行解压即可)
GitHub加速链接(复制下载链接后在链接前面添加https://gh.flyinbug.top/gh/即可),如
https://gh.flyinbug.top/gh/https://github.com/opencv/opencv/releases/download/4.6.0/opencv-4.6.0-vc14_vc15.exe
Cmake编译配置
编译前
打开cmake-gui,选择opencv源码路径和编译输出路径,如:
注:输出目录为
build/release
,要自己在sources文件夹下新建
然后,点击config,选择刚安装的gcc、g++编译器后,等待结束,中间会下载一些东西,不出意外的话肯定报红,没关系,接下来告诉你怎么手动下载好。
【主要是下载ade和ffmpeg这两个东西】
TIPS:下载的东西会存放在
sources/.cache
目录下
首先去编译输出的目录build/release
下,找到 CMakeDownloadLog.txt
这个文件,下载的东西都会在这里记录下来。
然后搜索 cmake_download
,如图所示是下载 ade 的示例:
去给定的地址下载好后,按照上图所说那样,把文件重命名然后放到 .cache/ade
(或者 .cache/ffmpeg
)
TIPS:提供两个加速地址:
https://gh.gh2233.ml/ 用于加速github.com,用法:(在下载链接前添加即可)
https://gh.gh2233.ml/https://github.com/opencv/ade/archive/v0.1.1d.zip
https://raw.staticdn.net 用于加速raw.githubusercontent.com,用法:(替换域名即可)
https://raw.staticdn.net/opencv/opencv_3rdparty/65ec04d4573dcdfa4531f0b9e67f35d8ffff873e/ffmpeg/opencv_videoio_ffmpeg_64.dll
都下载完成且放到对应的文件夹后的样子(注意使用的opencv不是4.6.0版本时,你的文件名前缀和我的可能不一样)
使用4.6.0版本时,可以直接去我分享的链接下载,已经把这几个文件都打包好了,下载下来解压到
sources/.cache/
目录下即可,链接如下:文件链接:https://ajream.coding.net/s/4d16cd42-8fd3-4547-9432-1261f3ed4f1e,密码:xty8
接下来进行编译配置
配置编译选项
- 不需要test测试文件,所以把test都不打勾
-
不需要编译python包(以后要用python开发opencv可以用pip下载安装)
-
不需要编译Java包
-
勾选 opengl
-
勾选build_opencv_world
-
勾选pkg
-
不勾选 precompiled_headers
-
设置安装路径,可以在mingw64安装路径下新建一个cpplibs文件夹,专门存放各种c++库
重新点击config,没有报红即可(如果是CMake Warning则不用理会)
然后generate
开始正式编译
打开cmd,进入 build/release
目录,然后输入指令 mingw32-make -j7
进行编译(时间较长)
TIPS: -j7表示使用7个线程进行编译,一般不超过cpu核心的2倍
注:这个过程如果出错,不要担心,回去看看配置编译选项这里是不是有什么没有配置,记得不要编译python,如果系统没有安装python的话或者python版本太旧可能会报错。
重新配置好后,重新
config->generate->输入mingw32-make -j8
,之前编译好的一些东西不用再编译,会在原来的基础上继续编译的。
安装
-
编译完成后,继续输入
mingw32-make install
即可自动安装到前面指定的文件夹内 -
进入安装好的文件夹中,把bin目录添加到环境变量
测试
新建一个cmake项目,其中Cmakelists.txt如下
cmake_minimum_required(VERSION 3.0.0)
project(cvTest VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 11)
# 设置OpenCVConfig.cmake所在路径
set(OpenCV_DIR D:\\xxxx\\cpplibs\\opencv\\x64\\mingw\\lib)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(cvTest WIN32 main.cpp)
target_link_libraries(cvTest ${OpenCV_LIBS})
测试代码main.cpp
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
// 图像显示测试
cv::Mat img = cv::imread(R"(D:\test\1.jpg)"); // 这里使用R"()"是c++11新特性,可以不用对反斜杠“\”转义了
if (!img.data)//判断图片是否加载进来
{
std::cout << "不能加载图片" << std::endl;
return -1;
}
cv::namedWindow("加载的图片", cv::WINDOW_AUTOSIZE);
cv::imshow("加载的图片", img);//""内命名一致,才能显示在一个窗口
cv::waitKey(0);
}
参考文章
- Windows安装OpenCV——利用MinGW+CMake从源码编译
- openCV:环境配置和测试代码
- WIN10 CMAKE +MINGW64 编译安装C++ OPENCV踩坑日记 - InvisibleVictory的文章 - 知乎
- Windows使用mingw64编译安装opencv
扩展模块opencv_contrib安装
前言
看该教程前请先看前面的OpenCV基础模块安装教程
下载
下载 opencv_contrib模块(需要与opencv基础模块版本号4.6.0相同,国内可以在gitcode下载)
配置、编译、安装
打开cmake-gui,选择新的一个编译输出路径build/contrib
,然后点击config,等待结束。
完成后按照【在基础模块的配置上】继续设置下面几个配置:
-
设置contrib模块路径
xxxx/opencv_contrib-4.6.0/modules
(注意要包含modules)
-
勾选 nonfree(允许使用带专栏的算法)
重新点击configure,然后等待,这又会下载很多东西,不出意外又会报红,因此接下来又需要手动下载了。【下载方式见文章最后-configure报红解决办法】
下载完毕并重命名且放到对应文件夹后,再次点击configure,然后generate,再然后就是关闭cmake,在 build/contrib
目录下打开cmd,输入命令 mingw32-make -j7
开始编译(通常需要30分钟以上)
编译完成即可使用命令 mingw32-make install
进行安装, 然后添加环境变量(注意是把含有.dll
的bin目录添加到环境变量)
configure报红解决办法
进入 build/contrib
目录,打开【CMakeDownloadLog.txt】文件,找到所有含有 "cmake_download" 的行, 单独复制到一个文件中,方便后面对照下载。
如:
#cmake_download "D:/xxxx/opencv460/opencv/sources/.cache/xfeatures2d/vgg/7cd47228edec52b6d82f46511af325c5-vgg_generated_80.i" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d/vgg_generated_80.i"
# 第2个链接是文件下载位置,第1个链接则是下载文件并重命名后保存的位置
对着每一条下载链接,把所有 raw.githubusercontent.com
都改为 raw.staticdn.net
后再去下载。
下载完成按照第1个链接描述那样,重命名并保存到指定位置。
【到此完成了】
附:写了个python脚本自动下载文件,安装了python以及requests库的可以用我的脚本进行下载(注意,有个 .dat
文件较大,请自行下载)
import requests
import os
def getItemUrls(fpath):
items = []
with open(fpath, 'r') as f:
lines = f.readlines()
for line in lines:
if('cmake_download' in line):
line = line.strip().replace('"', '')
linfo = line.split()
fileSavePath = linfo[1]
url = linfo[2].replace(
'raw.githubusercontent.com', 'raw.staticdn.net')
item = dict(file=fileSavePath, url=url)
items.append(item)
return items
def save(savepath, content):
with open(savepath, 'wb') as f:
f.write(content)
print('请输入 CMakeDownloadLog.txt 的文件路径',
r'比如D:\opencv\sources\build\release\CMakeDownloadLog.txt', sep='\n')
fp = input(': ')
items = getItemUrls(fp)
for i in range(len(items[0:-1])):
item = items[i]
os.makedirs('/'.join(item['file'].split('/')[:-1]), exist_ok=True)
try:
r = requests.get(item['url'], timeout=20)
except:
print(f"下载失败,请自己下载{item['url']}\n并保存为 {item['file']}")
save(item['file'], r.content)
print(f'i={i} --> 已下载 {item["url"]} 并保存好')
print("下载结束")
print(f"注意:由于最后一个文件过大,请自己下载{items[-1]['url']}\n并保存为 {items[-1]['file']}")
本文来自博客园,作者:aJream,转载请记得标明出处:https://www.cnblogs.com/ajream/p/17397020.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)