一、QT安装和配置
其实我并没有直接在Qt上开发,下载Qt而是因为:
CLion可以通过Qt的MinGW作为Toolset,并且可以将Qt creator作为external tool;
在进行Opencv的编译安装中可以用Qt自带的MinGW进行编译和安装,不用另外下载MinGW。
总之虽然不直接用Qt,但Qt拿来单纯作为界面GUI设计也挺方便的。(我日常在Qt creator设计修改界面,后在CLion进行ui逻辑代码编写)。不过Qt安装时间比较早,并没有做记录,在此推荐一下
QT介绍和安装指引
值得注意的是安装完后需要添加环境变量,依次按顺序将安装目录下的bin文件配置到系统path变量下,就不会出现缺失dll文件错误了。
二、CLion安装配置
使用Clion进行树莓派的远程开发-C语言
使用Clion进行树莓派的远程开发-C语言
Clion环境配置,安装完成后在Clion中配置:
选择settings->Tools->SSH Configurations,在右侧选择“+” 添加树莓派SSH连接,完成后可以点击 Test Connection测试是否成功:
选择settings->Build,Execution,Deployment->Toolchains,在右侧点击 “+“ 添加一个 Remote Host选项:
选择 CMake 项,在右侧Toolchain中选择上一步配置的cmake
设置映射位置
常见问题:
CLion远程开发external libraries不同步问题,即在树莓派上可以看到需要用到的库已经安装好了,但是在CLion上的external libraries上并没有更新,导致编译报错。库不同步问题解决
点击tool>>Resync with Remote Host即可,需更新一段时间。
如何申请正版JetBrain专业版账号
如果是要进行远程开发,需要用到CLion的SSH功能的,若是学生那么可以通过学生邮箱去JetBrain的官网申请一年的全家桶免费使用权(到期可以重新申请,续期)。
JetBrain教育申请
在windows上进行CLion开发
之前在树莓派上写的程序可能需要直接在windows平台运行,而在raspberry pi上用到了opencv库,本文的重点也在于opencv在windows上的安装编译。详见第三章。以下为CLion上调用opencv库示例。
cmake_minimum_required(VERSION 3.23)
project(win_test)
set(CMAKE_CXX_STANDARD 14)
add_executable(win_test main.cpp)
set(OpenCV_DIR D:/opencv/mingw_build/install)
find_package(OpenCV REQUIRED)
target_link_libraries(win_test ${OpenCV_LIBS})
#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
auto path = R"(D:\CLionProject\win_test\test.png)";//图片地址
Mat img = imread(path);
if (img.empty()) {
cout << "Error" << endl;
return -1;
}
namedWindow("pic", WINDOW_AUTOSIZE);
imshow("pic", img);
cout<<"Success!"<<endl;
waitKey();
return 0;
}
三、windows编译安装opencv
首先先确认是否安装Qt creator,本文以Qt自带MinGW作为工具而不另外安装MinGW。
前置软件安装
Qt creator
cmake https://cmake.org/download/
下载opencv并解压
前往opencv官网https://opencv.org/releases/下载opencv压缩包,我下载的是opencv 4.7.0。并解压到你想安装的位置。如我的位置:D:\opencv。
用cmake进行configure和generate
首先确认是否将Qt的MinGW加入环境变量,可以参考第一章。
打开cmd,输入
echo %PATH%
打开cmake软件设置sources和build的位置,mingw_build即我在解压后的opencv文件夹创建的build文件夹。
设置好之后点击Configure,稍等一段时间。首先Configure done后进行以下操作:
WITH_OPENGL | 勾选 |
WITH_IPP | 不勾选 |
ENABLE_PRECOMPILED_HEADERS | 不勾选 |
OPENCV_ENABLE_ALLOCATOR_STATS | 不勾选 |
OPENCV_GENERATE SETUPVARS | 不勾选 |
BUILD_PROTOBUF | 不勾选 |
WITH_PROTOBUF | 不勾选 |
在再次Configure done之后上拉查看错误,一般还会出现以下错误。这是因为D:\opencv\sources\.cache中这三个文件下载失败都是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”
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”
FFMPEG: Download: ffmpeg_version.cmake
Try 1 failed
CMake Warning at cmake/OpenCVDownload.cmake:202 (message):
FFMPEG: Download failed: 28;“Timeout was reached”
查看ffmpeg版本,并下载对应版本
在D:\opencv\sources\3rdparty\ffmpeg文件夹中的ffmpeg.cmake文件,以文本文件打开,可以查看对应ffmpeg版本。
我的opencv4.7.0是ffmpeg/4.x 20221225这个版本。前往https://github.com/opencv/opencv_3rdparty下载对应文件。下载整个压缩包,若你也是4.7.0,也可从https://download.csdn.net/download/weixin_44855366/87522947下载。
下载完之后解压将D:\opencv\opencv_3rdparty-ffmpeg-4.x_20221225\ffmpeg中的对应三个文件复制到D:\opencv\sources\.cache\ffmpeg,注意提前将原来三个文件的前缀记录,然后将复制进来的三个文件进行添加前缀。
再次进行Configure,这时候应该不会再报错,若报错则对应错误去百度,一般是需要勾选/取消勾选某个选项。然后点击Generate,至此cmake方面工作已经完成。
在cmd上进行编译和安装
打开cmd,首先cd到opencv所在mingw_build文件夹,然后进行编译,若编译不通过则根据报错百度,一般也是需要回到cmake勾选/取消勾选某选项,然后重新configure和generate。
cd D:\opencv\mingw_build
mingw32-make -j 8
若成功编译,那么继续输入开始install。至此opencv已安装完成。
mingw32-make install
配置环境变量
新建三个用户变量:
变量名:LD_LIBRARY_PATH
变量值: D:\opencv\mingw_build\install\x64\mingw\lib
变量名:OPENCV_INCLUDE
变量值:D:\opencv\mingw_build\install\include
变量名:OPENCV_LIB
变量值:D:\opencv\mingw_build\install\x64\mingw\lib
注意:用户环境的正确动态库的路径需要根据自己的实际情况进行更改路径。
另外在用户变量 path 下新增两条路径,至此,用户环境变量设置完成。
D:\opencv\mingw_build\install\x64\mingw\bin
D:\opencv\mingw_build\install\x64\mingw\lib
四、CLion测试opencv是否可用
以下为CLion上调用opencv库示例。
cmake_minimum_required(VERSION 3.23)
project(win_test)
set(CMAKE_CXX_STANDARD 14)
add_executable(win_test main.cpp)
set(OpenCV_DIR D:/opencv/mingw_build/install)
find_package(OpenCV REQUIRED)
target_link_libraries(win_test ${OpenCV_LIBS})
#include <iostream>
#include <cstring>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
auto path = R"(D:\CLionProject\win_test\test.png)";//图片地址
Mat img = imread(path);
if (img.empty()) {
cout << "Error" << endl;
return -1;
}
namedWindow("pic", WINDOW_AUTOSIZE);
imshow("pic", img);
cout<<"Success!"<<endl;
waitKey();
return 0;
}