因为需要做嵌入式平台下的图像处理需求,之前学习了Python中OpenCV的使用,但是python脚本在树莓派和Jetson等平台上的启动速度真的不敢恭维,所以考虑使用C++重新学习一遍OpenCV,开发使用VS2019+CMake+OpenCV4.5.1直接进行跨平台开发
下载 OpenCV访问 OpenCV 官网,下载 Windows 版本 Release.
也可以直接从GitHub上下载源码,但是那样不包含已经编译过的库文件,需要重新在本机编译,比较麻烦,使用Windows 版本 Release的vs15编译版本+vs2019目前还没发现其它问题。
这个预先的build不包含CUDA的模块的一些功能,需要做dnn的CUDA加速的话还是需要本地编译源码。
官网下载的文件名类似于 opencv-4.5.5-vc14_vc15.exe
这个文件其实是自解压程序,双击解压到合适的位置,比如:D:\
。
解压后将得到一个目录:D:\opencv
。
将 OpenCV 的 “bin” 文件夹路径添加到环境变量,否则可能出现 “xxx.dll 无法找到” 一类的错误。
本例中为 D:\opencv\build\bin
以及 D:\opencv\build\x64\vc15\bin
。
注意,示例中的 “vc15” 需要根据 visual studio 版本进行修改,你可以参考下列表格:
多提一句,“.dll” 后缀之前有 “d” 的是 “debug” 版本,否则为 “release” 版本。
这里提一个便于后期更换版本的添加环境变量的方式:
先新建一个OPENCV_DIR的环境变量,直接指向opencv的目录
然后再在Path环境变量中添加对OPENCV_DIR的引用:
另外,添加环境变量后可能要重启后才能生效。
此处以一个名为 “CMakeopencv” 的项目为例:这里的 CMakeList.txt是VS自动生成的模板
# CMakeList.txt: CMakeopencv 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)
project ("CMakeopencv")
# 将源代码添加到此项目的可执行文件。
#add_executable (CMakeopencv "CMakeopencv.cpp" "CMakeopencv.h")
add_executable(imageshow "imageshow.cpp")
set(OpenCV_DIR E:/PC/Opencv4.5.1/opencv/build)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIBRARY_DIRS})
target_link_libraries(imageshow ${OpenCV_LIBS})
注意到以下几点:
第 3 行 需要配置 OpenCV_DIR 为 “你刚刚解压的路径\build
”
第 7 行 记得将 lib 链接到项目
至此,OpenCV 环境配置完成。
相较于 VS 工程文件的配置方式,使用 CMake 配置更加简单,通过一份 CMakeList.txt 可以轻松实现跨平台。
另:
OpenCV 官方提供的是使用 vc 的 build,如果想要使用 Clion 进行开发,需要使用 Cmake 从 OpwnCV 源码生成一个 mingw 类型的 make,然后使用 mingw 进行编译,最后修改 set(OpenCV_DIR D:/opencv/build)
为 set(OpenCV_DIR D:/opencv/你编译的目标路径)
(比如 “mingw-build”)。
Image Watch 是opencv官方推出的用于调试时显示和监控图像变量的插件。
通过它我们能够很方便的对CV程序进行调试。
直接从VS中下载,选择工具->拓展与更新->搜索Image Watch,点击安装即可
Image Watch 读取的是堆栈中的图像数据,初学的时候注意打断点,在Debug模式下运行,效果如图所示。
Image Watch用过python版本时总是很纠结查找轮廓等 *** 作时怎么确定对象的大小,然后就是反复断点调试,在VS平台下有了这个工具简直不要太方便。
如果初次没有打开的话,在视图->其它窗口中打开即可。
功能:读取图像,转为灰度,显示图像,保存图像。
#include
#include //定义了色域转换常量
#include
#include
int main() {
cv:: Mat gray_image;
cv::Mat imagename = cv::imread("E:\\CV\\Project\\VSCpp\\CMakeopencv\\image\\3.jpg");
cv::cvtColor(imagename, gray_image, cv::COLOR_BGR2GRAY); //转为灰度图像
cv::imwrite("E:\\CV\\Project\\VSCpp\\CMakeopencv\\image\\1_grayimage.jpg", gray_image);
cv::namedWindow("imagename", cv::WINDOW_AUTOSIZE); //设置图像窗口的大小 WINDOW_AUTOSIZE为自适应大小
cv::namedWindow("Gray image", cv::WINDOW_AUTOSIZE);
cv::imshow("imagename", imagename);
cv::imshow("Gray image", gray_image);
cv::waitKey(0);
return(0);
}
参考连接:在这里感谢先前大神们的贡献
https://blog.csdn.net/flyconley/article/details/121723446
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)