OpenCV C++记录(一):基于MinGW的环境搭建
g++环境搭建
暂时采用VsCode与g++环境做基础测试,g++编译器采用mingw。
现在发现sourceforge好像没有挂载mingw下载了,或者我找不到入口,还是找到一个项目可以下载:
mingw下载,一般的C++项目posix或win32都无所谓,其差别在于多线程环境,但是OpenCV建议线程模式是posix,那就听劝,我下载的是2022.8.22的x86_64-12.2.0-release-posix-seh-rt_v10-rev0.7z
,其他版本自行甄别。
解压,将文件夹的bin目录加入环境变量,Vscode搜C++/C配置Ui,配置对应的编译器路径(为了生成c_cpp_properties.json),搜task选择编译器任务(为了生成task.json),就能得到VsCode编译C++环境。(这部分以前没有接触过的建议CSDN查详情)。
验证:cmd输入g++ -v
会输出对应编译器信息,或者验证VsCode是否能够正常编译代码。
OpenCV环境
对mingw和VsCode而言OpenCV需要自己用cmake编译,而如果是Visual Studio则直接下载官方编译好的库即可,现在采用前者,后者日后用到再补充。环境和附链如下:
posix mingw 12.2.0 、VsCode、Win10
OpenCV 4.5.5 :下载Sourcode压缩包
cmake 3.27.3:下载对应msi,无需手动配置环境变量
cmake编译OpenCV
下载好的SourceCode放置在合适位置解压,新建build文件夹暂存编译文件,打开cmake,源文件夹就是SourceCode,目的文件夹是build文件夹,点击Configure
选择mingw
bin文件夹下的gcc、g++作为编译器。
等待几分钟,等待配置项完成,按需求勾选,目前没什么特别需求,只有一个Qt,选择了WITH_OpenGL、WITH_QT;
点击Configure
、Generate
会生成对应的Makefile文件和相关依赖,部分依赖可能下载失败,查看CMakeDownloadLog.txt
日志,docopy中出现的github打开,并且下载对应的文件放到提示文件夹,我这里遇到的不算多,只下载opencv_videoio_ffmpeg.dll
等动态库。
于是开始cmake: 1
mingw32-make -j 8 #根据CPU数目改改数字,耗时几分钟——十几分钟不等
1
mingw32-make install
测试程序
为了验证OpenCV是能用的,参考以下测试方法,保持耐心。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using namespace std;
int main(){
cout<<"Hello WORLD"<<endl;
cv::Mat srcImage = cv::imread("C:/Users/24364/C_git/opencv_test/test.jpg");
//imshow输出可调节窗口
//cv::namedWindow("srcImage", cv::WINDOW_NORMAL);
cv::imshow("srcImage", srcImage);
cv::waitKey(0); //按下才退出进程,防止闪图
return 0;
}
在bash环境链接库需要-I头文件、-L库文件、-l动态库文件,VsCode这里貌似没有一个环境变量解决这些问题,那还是按原理来吧。首先要让编译器包含头文件,在c_cpp_properties.json
加入:
1
2
3
4"includePath": [
"${workspaceFolder}/**",
"F:\\opencv-4.5.5\\build\\install\\include", //加入头文件路径
],1
2
3
4
5
6
7
8
9
10
11
12
13
14
15"args": [
"-fdiagnostics-color=always", //默认编译参数
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-I", //头文件
"F:\\opencv-4.5.5\\build\\install\\include",
"-L", //库文件
"F:\\opencv-4.5.5\\build\\install\\x64\\mingw\\lib",
"-lopencv_core455", //具体动态库,不同程序需求不同
"-lopencv_imgproc455",
"-lopencv_highgui455",
"-lopencv_imgcodecs455"
],
至此F5能够运行上述CV程序了,其他的日后探讨。效果:
Q&A
- 编译时出现
could not convert template argument......
:
- 在尝试OpenCV 4.8时编译出错,一说是mingw和Opencv版本不匹配,遂改用OpenCV 4.5.5;
- 运行代码提示
undefined reference to ‘cv::Mat::Mat()
undefined reference
类错误大多数指向动态库链接失败导致类型错误,首先确保库路径、头文件路径没有报错,其次确定动态库文件名称正确,有的版本动态库文件名是-lopencv_imgproc.dll.a
,那么上面就没有455了。
- 代码运行无报错,但调试报错
Unable to start debugging. Unexpected GDB output from command “-exec-run”
,或者计算机重启遇到此问题
- 环境变量没有配置好,按原文描述配置。
参考链接: