opencv开发环境搭建

news/2024/12/22 20:29:36/

从github下载opencv最新源码https://github.com/opencv/opencv,目前最新是5e93c8202363a13fc72df30f8c14069c5ab66e42.

Ubuntu环境下编译

安装依赖库:

sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-devgit clone https://github.com/opencv/opencv.gitsudo apt-get install cmake-gui

Mac环境下编译

进入源码路径,新建一个release的文件夹,并进入,执行:

cmake -G "Unix Makefiles" ..
make
sudo make install

编译完成后会在release生成lib目录,lib下存放所有编译成的动态库,可能与ubuntu下编译结果不同,ubuntu下编译只生成libopencv_world.so一个动态库,而mac下会生成opencv_core opencv_highgui opencv_imgproc opencv_ml opencv_objdetect opencv_photo opencv_video opencv_dnn opencv_imgcodecs opencv_shape等多个动态库.执行make install后会将头文件拷贝到/usr/local/include/下,将动态库拷贝到/usr/local/lib/下,将jar包等其他文件拷贝到/usr/local/share/OpenCV/下,makefile脚本加入动态链接库:

testopencv:main.cppg++ $+ -o $@ -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_video -lopencv_dnn -lopencv_imgcodecs -lopencv_shape

main.cpp下输入下面测试代码:

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
using namespace cv;
int main(int argc, char *argv[])
{Mat image = imread("1.png");namedWindow("img");imshow("img", image);waitKey(0);return 0;
}

在生成的执行文件同目录下放入名字为1.png的图片.

配置QT环境

在新建的QT工程中的.pro文件中添加如下配置代码:

INCLUDEPATH += /usr/local/include
INCLUDEPATH += /usr/local/include/opencv
INCLUDEPATH += /usr/local/include/opencv2
LIBS += -L/usr/local/lib \-lopencv_core \-lopencv_highgui \-lopencv_imgproc \

完成以上步骤后按理应该是能成功的,但是运行时发现会出现如下的错误。

dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /usr/local/lib/libjpeg.8.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

针对以上问题,在项目-运行配置中,增加变量DYLD_LIBRARY_PATH值为/Application/QT5.7.0/5.7/clang_64/lib:/usr/local/lib

或者:
将“”目录下的对应动态链接库文件创建软连接到“/usr/local/lib”目录下:

$ cd /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources
$ sudo ln -sf libJPEG.dylib /usr/local/lib/libJPEG.dylib
$ sudo ln -sf libPng.dylib /usr/local/lib/libPng.dylib
$ sudo ln -sf libTIFF.dylib /usr/local/lib/libTIFF.dylib

opencv_75">qt+opencv常见问题

在Mac上运行以上代码时,提示以下错误:

dyld: Symbol not found: __cg_jpeg_resync_to_restartReferenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIOExpected in: /usr/local/lib/libJPEG.dylibin /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO

解决办法是将“”目录下的对应动态链接库文件创建软连接到“/usr/local/lib”目录下:

$ pwd
/System/Library/Frameworks/ImageIO.framework/Versions/A/Resources
$ sudo ln -sf libJPEG.dylib /usr/local/lib/libJPEG.dylib
$ sudo ln -sf libPng.dylib /usr/local/lib/libPng.dylib
$ sudo ln -sf libTIFF.dylib /usr/local/lib/libTIFF.dylib

stackoverflow上面另一种解决方案:
If using Qt Creator, you have to uncheck the Add build library search path to DYLD_LIBRARY_PATH and DYLD_FRAMEWORK_PATH option from the Run section in the Projects tab:
![[8.Attachments/image/e7fa96f0a446cfa74bbefa0fb52e2cd3_MD5.png]]


http://www.ppmy.cn/news/1517569.html

相关文章

【高级IO总结】深度探索高级IO:五种IO模型、高级IO、Select、Poll、Epoll工作模式

文章目录 前言文章链接 前言 IO 是 “Input/Output”&#xff08;输入/输出&#xff09; 的缩写&#xff0c;指的是计算机系统与外部世界之间的数据传输和交换过程。 网络通信的本质就是&#xff1a;IO 总体来说&#xff0c;IO的效率是相对较低的&#xff0c;为什么&#xf…

python爬虫:selenium+browsermobproxy实现浏览器请求抓取(模块安装详解)

前言 本来很多场景用beautiful和requests就能解决的&#xff0c;但是最近发现了某些网站会使用<link>来链接网页信息&#xff0c;让我没办法通过requests获取页面的具体内容&#xff1b;并且接口也加入了某种token的生成方案&#xff0c;导致我无从下手。 因此&#xff0…

P2234 [HNOI2002] 营业额统计 java版本

文章目录 P2234 [HNOI2002] 营业额统计 java版本题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示算法分析代码实现结语 P2234 [HNOI2002] 营业额统计 java版本 题目描述 Tiger 最近被公司升任为营业部经理&#xff0c;他上任后接受公司交给的第一项任务便是统计…

程序猿成长之路之数据挖掘篇——Kmeans聚类算法

Kmeans 是一种可以将一个数据集按照距离&#xff08;相似度&#xff09;划分成不同类别的算法&#xff0c;它无需借助外部标记&#xff0c;因此也是一种无监督学习算法。 什么是聚类 用官方的话说聚类就是将物理或抽象对象的集合分成由类似的对象组成的多个类的过程。用自己的…

【在Linux世界中追寻伟大的One Piece】传输层协议UDP

目录 1 -> 传输层 2 -> 端口号 2.1 -> 端口号范围划分 2.2 -> 知名端口号 3 -> UDP协议 3.1 -> UDP协议端格式 3.2 -> UDP的特点 3.2.1 -> 面向数据报 3.3 -> UDP的缓冲区 3.4 -> UDP使用注意事项 3.5 -> 基于UDP的应用层协议 1 -…

基于SSM+小程序的旅游社交登录管理系统(旅游4)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 本旅游社交小程序功能有管理员和用户。管理员有个人中心&#xff0c;用户管理&#xff0c;每日签到管理&#xff0c;景点推荐管理&#xff0c;景点分类管理&#xff0c;防疫查询管理&…

力扣——数组(一)

一、二分法&#xff08;有序数组&#xff09; 1、搜索等于target的元素 法一&#xff1a; 直接遍历 class Solution { public:int search(vector<int>& nums, int target) {int i0;for(i0;i<nums.size();i){if(nums[i]target){return i;}}return -1;} }; 法二…

【C++第十五章】继承

【C第十五章】继承 定义&#x1f9d0; 继承是C面向对象编程中的一个核心概念&#xff0c;它允许创建一个新类&#xff08;称为派生类或子类&#xff09;从已有类&#xff08;称为基类或父类&#xff09;中继承属性和方法。 继承的主要用途包括&#xff1a; 代码重用&#xff1…