0 准备工作
0-1 如果有conda 先注销了
这是因为您的系统有某个库(例如,libz.so
)的两份副本,一份来自 Anaconda,另一份来自系统。
我没有最终的解决方案,但有两种解决方法:
-
您可以暂时从 shell 初始化脚本中取消注释 conda init 设置,重新启动终端,然后再次构建 GMT。在构建 GMT 之前,请记住完全删除旧的构建目录。构建 GMT 后,您需要恢复 conda init 设置。
1下载安装包
1-1 opencv下载
https://github.com/opencv/opencv/releases/tag/4.5.5
1-2 扩展库下载
https://github.com/opencv/opencv_contrib/releases/tag/4.5.5
2依赖
1 2 3 4 5 | sudo apt install build-essential cmake git pkg-config libgtk-3-dev \ libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \ libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \ gfortran openexr libatlas- base -dev python3-dev python3-numpy \ libtbb2 libtbb-dev libdc1394-22-dev |
sudo apt install libtiff-dev
sudo apt list --installed | grep tiff
3 安装选项
3-0打开cmake
1 | camke-gui |
3-1 扩展库位置
3-2 cuda 一把不选
3-3 sifi点
3-4 java 不需要
3-5 python 默认吧
3-6 集成库 不要
3-7安装路径 多版本共存问题
https://blog.csdn.net/xiao_qs/article/details/126650329
一般是/usr/local/lib下,比如我的opencv4.4.5, 因为安装的时候如果不指定prefix路径,那么在make install 时会将所有的 .so 文件安装在 /usr/local/lib 下,所有的头文件安装在/usr/include下。
修改
3-9 特征点 选择是
4 生成
成功后
5 编译
1 | sudo make -j8 |
安装
1 | sudo make install |
安装位置
7 编译依赖库问题
安装位置
在OpenCV编译好后,所在目录中会生成OpenCVConfig.cmake文件,这个文件中指定了CMake要去哪里找OpenCV,其.h文件在哪里等。
这种情况适用于只有一个版本的opencv,安装在默认路径下,一般是/usr/local/lib下,比如我的opencv4.4.5, 因为安装的时候如果不指定prefix路径,那么在make install 时会将所有的 .so 文件安装在 /usr/local/lib 下,所有的头文件安装在/usr/include下。
3.4.9安装在默认位置
4.5.5在手动指定位置
8测试
1系统环境没有添加opencv
2 装了两个版本
创建工程
CMakeLists修改1
CMakeLists.txt
1 | CMAKE_PREFIX_PATH只是添加了查找路径,如果系统默认路径也有另一个版本的opencv,并不能指定opencv<br><br> |
1 2 3 4 5 6 7 8 9 10 11 | # 设置 OpenCV 的路径 # opencv4.5 OpenCVConfig位置 set (OpenCV_DIR "/home/dongdong/1sorftware/1work/opencv/opencv455/install/lib/cmake/opencv4" ) # opencv3.4.9 OpenCVConfig位置 # set(OpenCV_DIR "/home/dongdong/1sorftware/1work/opencv/opencv349/install/share/OpenCV") find_package(OpenCV REQUIRED) # 你的其他配置 include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(your_executable your_source_files) target_link_libraries(your_executable ${OpenCV_LIBS}) |
终端设置2
一次性的
1 2 3 4 5 6 7 | # opencv版本制定 # opencv3.4.9 OpenCVConfig位置 #export OpenCV_DIR=/home/dongdong/1sorftware/1work/opencv/opencv349/install/share/OpenCV # opencv4.5 OpenCVConfig位置 export OpenCV_DIR = / home / dongdong / 1sorftware / 1work / opencv / opencv455 / install / lib / cmake / opencv4 export LD_LIBRARY_PATH = / home / dongdong / 1sorftware / 1work / opencv / opencv455 / install / lib:$LD_LIBRARY_PATH export CPLUS_INCLUDE_PATH = / home / dongdong / 1sorftware / 1work / opencv / opencv455 / install / include / opencv4:$CPLUS_INCLUDE_PATH |
永久性设置
ctrl+h显示隐藏文件,找到.bashrc
给与执行权限
1 | sudo chmod - R 777 .bashrc |
保存在最后一行 选择对应版本添加
1 2 3 4 5 6 7 8 9 10 | # opencv版本制定 # opencv3.4.9 OpenCVConfig位置 export OpenCV_DIR = / home / dongdong / 1sorftware / 1work / opencv / opencv349 / install / share / OpenCV export LD_LIBRARY_PATH = / home / dongdong / 1sorftware / 1work / opencv / opencv349 / install / lib:$LD_LIBRARY_PATH export CPLUS_INCLUDE_PATH = / home / dongdong / 1sorftware / 1work / opencv / opencv349 / install / include / opencv2:$CPLUS_INCLUDE_PATH # opencv4.5 OpenCVConfig位置 #export OpenCV_DIR=/home/dongdong/1sorftware/1work/opencv/opencv455/install/lib/cmake/opencv4 #export LD_LIBRARY_PATH=/home/dongdong/1sorftware/1work/opencv/opencv455/install/lib:$LD_LIBRARY_PATH #export CPLUS_INCLUDE_PATH=/home/dongdong/1sorftware/1work/opencv/opencv455/install/include/opencv4:$CPLUS_INCLUDE_PATH |
使更改生效:
1 | source ~ / .bashrc |
检查确认
1 | echo $OpenCV_DIR |
简单一点 不需要上述(前提是系统目录没有装其他东西 ros安装会cv_briage默认装opencv4.2 从而优先于CMAKE_PREFIX_PATH去查找依赖)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | cmake_minimum_required(VERSION 3.1) #项目名字 project(opencv_example_project) #设置opencv安装路径 set (CMAKE_PREFIX_PATH "/home/r9000k/v1_software/opencv/opencv349/install" ) #set(CMAKE_PREFIX_PATH "/home/r9000k/v1_software/opencv/opencv455/install") #自动查找库和文件 find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) #打印消息 message(STATUS "OpenCV library status:" ) message(STATUS " config: ${OpenCV_DIR}" ) message(STATUS " version: ${OpenCV_VERSION}" ) message(STATUS " libraries: ${OpenCV_LIBS}" ) message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}" ) #生成可知性文件 add_executable(opencv_example main.cpp) #可执行文件绑定库 target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS}) |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include "opencv2/videoio.hpp" #include <iostream> using namespace cv; using namespace std; void drawText(Mat & image); int main() { cout << "Built with OpenCV " << CV_VERSION << endl; Mat image; VideoCapture capture; capture.open(0); if (capture.isOpened()) { cout << "Capture is opened" << endl; for (;;) { capture >> image; if (image.empty()) break ; drawText(image); imshow( "Sample" , image); if (waitKey(10) >= 0) break ; } } else { cout << "No capture" << endl; image = Mat::zeros(480, 640, CV_8UC1); drawText(image); imshow( "Sample" , image); waitKey(0); } return 0; } void drawText(Mat & image) { putText(image, "Hello OpenCV" , Point(20, 50), FONT_HERSHEY_COMPLEX, 1, // font face and scale Scalar(255, 255, 255), // white 1, LINE_AA); // line thickness and type } |
传建build并编译
1 | cmake .. |
生成
1 | make |
执行
1 | ./opencv_example |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2019-09-05 34 树莓派运动检测软件