目录
一、CLion 2022.2.1下载与安装
CLion 下载与安装可以说是整个工作中最轻松的了,而且有很多资料。
- CLion 下载地址:https://www.jetbrains.com/clion/download/#section=windows。
- 安装参考博客(下载完即可,先不用配置CMake/MinGW编译调试器,后面会讲):https://blog.csdn.net/qq_44723773/article/details/104698675
二、下载opencv 4.4.0
- opencv下载链接: https://opencv.org/releases/
- 找到相应的版本点击windows下载安装即可
- 下载后的目录如下(第二个是自己新建的空文件夹)
build 文件夹是安装包自带的使用 VC15 编译好的环境, 不过咱们需要使用 mingw 编译器重新编译, 所以重新新建一个 cmake_build 文件夹,文件夹名字自己随便定义都可以。
注意:在opencv这块上我遇到了以下两个坑:
- 1.看一下你下载的opencv\sources\.cache\ffmpeg,里边有三个文件,大概率大小都是0kb,或者没有.cache这个文件,没关系,后面会有解决方案。
第一个“-”前面的一串字母数字是MD5码,每个版本的opencv可能不一样,这里只看后缀是否是这三个文件。
下面三个文件不是0kb是我重新下载相应文件后的结果。
- 2.下载opencv后存放的文件夹名字取正常点,就叫opencv就行。千万别叫:
opencv 4.4.0(opencv空格4.4.0)否则后面MinGW编译opencv时找的文件夹不是opencv 4.4.0而是文件夹 4.4.0(当然会因为找不到此文件夹而报错)。
我也不知道为啥,反正看到没这个文件夹就重新下载了一遍,换了个名字。
三、下载及配置MinGW-w64GCC-8.1.0
1.下载MinGW
- MinGW下载链接:https://sourceforge.net/projects/mingw-w64/files/
选择下载下图中方框中的即可。
下载下来是一个压缩包,解压后有一个mingw64的文件,找个地方放好就行了。
以下是有问题的做法(至少我遇到问题了):
之前遇到过有些博主会推荐下载 上上图 中第一个链接,也就是MinGW-W64 Online Installer下的MingGW-W64-install.exe
说一下这样安装的步骤以及我遇到的问题: - 下载并点击安装程序(相信大家都会)
- 剩下的步骤看图
此处有没有发现,这的配置就是我上面图中(也就是下图)推荐的那个配置呀
其实这个方法就是个需要联网的下载器,各个选项可以选择,你要是确定了哪个版本,就直接在下载页面下载相应的版本就好了,无需下载MinGW-W64 Online Installer下的MingGW-W64-install.exe。这种方法咱们接着向下走。
问题马上来了,点完next后本应该是安装的进度条,结果出现:
The file has been downloaded incorrectly!
所以还是不用这种方法了。
2.配置环境变量
将刚才下载的x86_64-posix-seh解压后的mingw64文件夹中的bin加入环境变量中的path中。
- 步骤:右击:“我的电脑”->属性->搜索“高级系统配置”->高级->环境变量->用户变量中双击“PATH”->新建->bin的地址->确定(别忘记)!
添加完成后看是否生效:
- win+r,输入cmd
- 键入:set PATH=C: (有个冒号!!)
- 关闭cmd,重新打开,键入 echo %PATH%,若有显示mingw64\bin则成功
四、下载CMake 3.24.1
- cmake下载地址:https://cmake.org/download/
- 一直点next,不过下图中选第二个
- 通过:win+r->cmd->键入:cmake -version(cmake和“-”间有空格)。显示如下配置成功。
五、 CMake编译OpenCV 4.4.0
- 1.打开桌面上的cmake
- 2.点击 Browse Source, 将安装好的 OpenCV 文件夹下的 source 文件夹目录添加进来。点击 Browse Build, 将建好的 cmake_build 空文件夹添加进来。
- 点击Configure会弹出选项框,选项如下,则点击next:
- C 选择安装目录:F:\mingw8.1.0\mingw64\bin\gcc.exe
C++选择安装目录:F:\mingw8.1.0\mingw64\bin\g++.exe
(目录根据自己的mingw安装位置,下图是从网上找的,和我的地址不一样)
选择完成后点击 Finish。
- 等待 Configure 完成后, 进行选项的调整, 注意以下几个配置选项:
不勾选 WITH_IPP
不勾选 ENABLE_PRECOMPILED_HEADERS
不勾选 OPENCV_ENABLE_ALLOCATOR_STATS
不勾选 OPENCV_GENERATE SETUPVARS
- 再次点击 Configure,等待加载进度条。
当进度条满了后最后一行会出现:Configuring done。你以为大功告成?先别急,向上翻看一下没有有红色的编译错误的字体。大部分人都不会一帆风顺的。
下面就把我在此阶段遇到的问题汇总一下,如果你有其他错误,不要灰心,相信度娘和csdn。 - 1.1报错:
CMake Warning at cmake/OpenCVGenSetupVars.cmake:54 (message):CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install directory
1.2解决方案:取消勾选 OPENCV_GENERATE_SETUPVARS选项,重新点一下Configure。
1.3参考:http://t.csdn.cn/Ps7kU - 2.1报错:gcc: error: long: No such file or directory
2.2:解决方案:取消勾选OPENCV_ENABLE_ALLOCATOR_STATS选项,重新点一下Configure。 - 3.1报错:(原因就是在上文在安装opencv时说的下载的3个文件是0kb)
FFMPEG: Download: opencv_videoio_ffmpeg.dll
Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
FFMPEG: Download failed: 35;“SSL connect error”
For details please refer to the download log file:
D:/Packages/cpp/opencv/MinGW-build/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
modules/videoio/cmake/detect_ffmpeg.cmake:14 (download_win_ffmpeg)
modules/videoio/cmake/init.cmake:7 (include)
modules/videoio/cmake/init.cmake:18 (add_backend)
cmake/OpenCVModule.cmake:298 (include)
cmake/OpenCVModule.cmake:361 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
FFMPEG: Download: opencv_videoio_ffmpeg_64.dll
Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
FFMPEG: Download failed: 28;“Timeout was reached”
For details please refer to the download log file:
D:/Packages/cpp/opencv/MinGW-build/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
modules/videoio/cmake/detect_ffmpeg.cmake:14 (download_win_ffmpeg)
modules/videoio/cmake/init.cmake:7 (include)
modules/videoio/cmake/init.cmake:18 (add_backend)
cmake/OpenCVModule.cmake:298 (include)
cmake/OpenCVModule.cmake:361 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
FFMPEG: Download: ffmpeg_version.cmake
Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
FFMPEG: Download failed: 28;“Timeout was reached”
For details please refer to the download log file:
D:/Packages/cpp/opencv/MinGW-build/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
modules/videoio/cmake/detect_ffmpeg.cmake:14 (download_win_ffmpeg)
modules/videoio/cmake/init.cmake:7 (include)
modules/videoio/cmake/init.cmake:18 (add_backend)
cmake/OpenCVModule.cmake:298 (include)
cmake/OpenCVModule.cmake:361 (_add_modules_1)
modules/CMakeLists.txt:7 (ocv_glob_modules)
3.2:解决方法:
分析:
根据错误提示打开D:/opencv/mingw_build/CMakeDownloadLog.txt从中可发现出错的文件夹是D:/opencv/sources/.cache。在D:/opencv/sources/.cache中,凡是文件大小是0KB,都是无法下载并报错的。
解决方法:
step1:打开https://github.com/opencv/opencv_3rdparty,找到正确版本的ffmpeg并下载。
补充:关于查看ffmpeg版本:/opencv/sources/3rdparty/ffmpeg/ffmpeg.cmake
我的opencv4.4.0是ffmpeg/master20200609这个版本
点开相应的版本,下载缺失的文件。
大家也可以在csdn上搜相应版本的ffmpeg-master文件进行下载。
比如:我直接找到了opencv_3rdparty-ffmpeg-master_20200609.zip
我把我下载好的opencv4.4.0对应的ffmpeg-master_20200609放到网盘了,如用请自取:
链接:https://pan.baidu.com/s/1-ztq9UIUENZdVwDJ4aNVlA
提取码:jb6k
注意:原始opencv\sources.cache\ffmpeg中这三个0kb的文件命名格式是MD5码-文件名。而我们下载文件名字是没有MD5码的,需要加上。
怎么知道文件的MD5码呢?
- (1)法1:相同版本的ffmpeg这三个文件的MD5码是固定的,也就是说这三个空文件的名字完全可以当做 下载的三个文件的名字。
- (2)法2:如果法1你不放心,可以验证一下:Win+r->cmd->依次键入:
cd /d F:\opencv\sources\.cache\ffmpeg
certutil -hashfile ffmpeg_version.cmake(某一文件名) MD5
我键入的代码中的文件名字是我改完了的,大家可以试一下新下载的文件的MD5码是不是和0kb的对应文件的MD5码相同。
F:\opencv\sources\.cache\ffmpeg>certutil -hashfile ad57c038ba34b868277ccbe6dd0f9602-ffmpeg_version.cmake MD5
对3个0kb文件执行完以上操作后,回到CMake点一下Configure,红色报错就消失了。
- 在以上所有问题解决后,再点击一下Generate就好了
3.3:参考:
(1)https://zhuanlan.zhihu.com/p/363803758
(2)https://blog.csdn.net/JR024778/article/details/119572602
(3)https://blog.csdn.net/xinxin_Tian/article/details/105717254
六、使用MinGW编译opencv,并配置环境变量
1.MinGW编译opencv
进行完成 Cmake 编译 OpenCV 后,需要将生成的 cmake_bulid 文件夹编译生成工程。
- step1:Win+r->cmd->键入:cd /d F:\opencv\mingw_build。进入上一步cmake生成的 cmake_bulid目录下。
- step2:键入:mingw32-make –j 8 ,这个过程编译时间有点久,机器不同时间也不一样。这里-j 8 意思是开启8 核运行,这个值取决你电脑的 CPU 物理核心数。
之后就会从0%到100%的编译。当然也会遇到问题。我遇到了两个:
(1)报错1.1:显示错误:find_host_package(PythonInterp 2.7)’ found wrong Python version,具体提示如下:
Found PythonInterp: C:/Users/LiuBing/AppData/Local/Programs/Python/Python38/python.exe (found suitable version “3.8.2”, minimum required is “2.7”)
CMake Warning at cmake/OpenCVDetectPython.cmake:81 (message):
CMake’s ‘find_host_package(PythonInterp 2.7)’ found wrong Python version:
PYTHON_EXECUTABLE=C:/Users/LiuBing/AppData/Local/Programs/Python/Python38/python.exe
PYTHON_VERSION_STRING=3.8.2
Consider providing the ‘PYTHON2_EXECUTABLE’ variable via CMake command line
or environment variables
Call Stack (most recent call first):
cmake/OpenCVDetectPython.cmake:271 (find_python)
CMakeLists.txt:598 (include)
1.2解决方案:计算机右键->属性->高级系统设置->高级->环境变量->系统变量->新建
按下图操作后点“确定”:(需要知道你python安在哪里了,并且python.exe是手打上去的)
1.3参考:https://blog.csdn.net/liubing8609/article/details/105462166
(2):4.4.0\build\include:No such file or directory
解决方案2.2:他提示的是4.4.0,而我当时下载opencv时文件夹命名是opencv 4.4.0
可能空格识别不出,我又重新下载改了名字,以上所有步骤再做一遍后没有报错了。
历经千辛万苦终于100%
- step3:键入:mingw32-make install 此命令执行较快,目的是将编译生成的文件整合到F:/opencv/mingw_build/install目录中
2.配置环境变量
新建三个用户变量:
变量名:LD_LIBRARY_PATH
变量值: F:\opencv_lib\mingw_build\install\x64\mingw\lib
变量名:OPENCV_INCLUDE
变量值:F:\opencv_lib\mingw_build\install\include
变量名:OPENCV_LIB
变量值:F:\opencv_lib\build_2\install\x64\mingw\lib
注意:用户环境的正确动态库的路径需要根据自己的实际情况进行更改路径,上面的路径是不适用于每一个人的。
另外在用户变量 path 下新增两条路径:
F:\opencv_lib\mingw_build\install\x64\mingw\bin
F:\opencv_lib\mingw_build\install\x64\mingw\lib
至此,用户环境变量设置完成。
七、在CLion项目中使用opencv
- 新建1个项目,编辑CMakeLists.txt,如下所示:
cmake_minimum_required(VERSION 3.23)//版本号可通过 cmake -version查看
project(clion_opencv)//项目名
set(CMAKE_CXX_STANDARD 14)
add_executable(clion_opencv main.cpp)
set(OpenCV_DIR F:/opencv/cmake_build/install)//以上是自带的,以下得添加
find_package(OpenCV REQUIRED)
target_link_libraries(clion_opencv ${
OpenCV_LIBS})
- 编辑main.cpp,如下:
#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
auto path = R"(F:\lena.jpg)";//图片地址
Mat img = imread(path);
if (img.empty()) {
cout << "Error" << endl;
return -1;
}
namedWindow("pic", WINDOW_AUTOSIZE);
imshow("pic", img);
waitKey();
return 0;
}
lena女神出现了!!!!
第七部分参考博客:
https://blog.csdn.net/qq_44723773/article/details/104698675
https://blog.csdn.net/JR024778/article/details/119572602