【OpenCV图像处理系列一】OpenCV开发环境的安装与搭建(Ubuntu + Window都适用)
🔗 运行环境:OpenCV,Ubuntu,Windows
🚩 撰写作者:左手の明天
🥇 精选专栏:《python》
🔥 推荐专栏:《算法研究》
#### 防伪水印——左手の明天 ####
💗 大家好🤗🤗🤗,我是左手の明天!好久不见,今天开始开启新的篇章——OpenCV💗
📆 最近更新:2023 年 02 月 12 日,左手の明天的第 272 篇原创博客
📚 更新于专栏:OpenCV详解
#### 防伪水印——左手の明天 ####
1. Ubuntu 下编译 opencv 源代码(For linux & Android)
1.1 下载 opencv 源码
1.2 下载安装 Cmake
$ sudo apt-get install cmake
$ sudo apt-get install cmake-qt-gui
1.3 安装 ubuntu 下必要的库文件:
sudo apt-get install pkg-config libgtk2.0-dev libjpeg libtiff libjasper libpng zlib
openexr libjpeg-dev ffmpeg libgstreamer libv4l libv4l-0 libv4l-dev libxine unicap
libavformat-dev libswscale-dev swig libjpeg-progs build-essential python-numpy
可能会出现依赖包libjasper-dev无法安装的情况,出现错误提示:
E: Unable to locate package libjasper-dev
此时,可以分为两步完成:
(1) 首先安装除了libjasper-dev之外的所有包:sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
(2) 然后单独安装libjasper-dev包:sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
1.4 使用 Cmake 进行配置:
$ cmake-gui
(2)进行配置:

1.5 编译 opencv 生成 linux 下的 opencv 库文件
$ cd ~/2.2opencv/opencv-build/
~/2.2opencv/opencv-build$ make
编译完成后,执行安装命令将生成的库文件安装到 Ubuntu 系统的相应路径中去
~/2.2opencv/opencv-build$ make install
对于 Ubuntu
编译中如果总是出错,有可能是选择的 Opencv 版本与 Ubuntu 中相关环境的版本不匹配,所以最好选择 poencv2.2 或者是 opencv2.0
1.6 测试 linux Opencv 例程
执行它:bash ./build_all.sh,成功之后,ls命令查看,生成了一个facedetect执行文件,./facedetect 执行它!如果弹出一个捕捉脸部的窗口,就成功了。
$ cd /home/sunny/2.2opencv/OpenCV-2.2.0/samples/c
/2.2opencv/OpenCV-2.2.0/samples/c$ bash ./build_all.sh
/2.2opencv/OpenCV-2.2.0/samples/c$ ./facedetect
注:如果在最后执行 facedetect 时报错:./facedetect: error while loading shared libraries: libopencv_core.so.2.2: cannot open shared object file: No such file or directory这是因为你没有装 ffmpeg,输入 sudo -apt-get install ffmpeg 安装,安装成功之后再执行facedectect 即可!
1.7 Opencv For Android 的编译
1.7.1 安装 ndk:
1.7.2 安装 Android SDK
1.7.3 编译 opencv 中关于 android 相关的源码
1.7.3.1 静态库的编译
~$ cd 2.2opencv/OpenCV-2.2.0/android/
~/2.2opencv/OpenCV-2.2.0/android$ mkdir build
~/2.2opencv/OpenCV-2.2.0/android$ cd build/
~/2.2opencv/OpenCV-2.2.0/android/build$
~/2.2opencv/OpenCV-2.2.0/android/build$ cmake ..
~/2.2opencv/OpenCV-2.2.0/android/build$ make
编译阶段会花费一些时间
1.7.3.2 共享库的编译
~$ cd 2.2opencv/OpenCV-2.2.0/android/android-jni
~/2.2opencv/OpenCV-2.2.0/android/android-jni$ make
#location of android-opencv.mk file that was generated by the cmake build
#of opencv for android
OPENCV_CONFIG=../build/android-opencv.mk#the root directory of the crystax r4 ndk - ndk-build should be in this dir
#you can download the ndk from http://www.crystax.net/android/ndk-r4.php
ANDROID_NDK_ROOT=$(HOME)/android-ndk-r4-crystax#define only armeabi-v7a to make the final apk smaller or armeabi
ARM_TARGETS="armeabi armeabi-v7a"
修改完路径之后,再次 make,就开始编译共享链接库了。
注意:每个工程文件的目录下都会由一个 local.env.mk 文件用于配置相关的 NDK 路径,在下面编译例子程序 CvCamera 的时候也要注意。最好是将 NDK 解压到家目录,这样在以后就不需要进行配置了。
1.7.3.3 安装 ant 进行 Java 相关的编译
~$ sudo apt-get install ant1.8
安装完成之后,就开始接着编译 Java 先关的部分:
~/2.2opencv/OpenCV-2.2.0/android/android-jni$ sh ./project_create.sh
~/2.2opencv/OpenCV-2.2.0/android/android-jni$ ant compile
至此 Opencv 中关于 Android 的相关代码就编译完成了。最终的生成文件可能是在:
Opencv-2.2.0 _|_android_|_android-jni|_apps|_build
1.7.3.4 编译安装 android 下的测试程序 CVCamera
~$ cd 2.2opencv/OpenCV-2.2.0/android/apps/CVCamera/
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ sh build.sh
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ make
这一步主要是建立 swig wrappers and shared library.
(SWIG 是一种简化脚本语言与 C/C++接口的开发工具。简而言之,SWIG 是一个通过包装和编译 C 语言程序来达到与脚本语言通讯目的的工具。)
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$sh project_create.sh
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ ant debug
这样就在当前目录下的 bin 目录生成了 debug 版的 apk:CVCamera-debug.apk
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ ant install
上面的整个过程,既是用来检验 opencv 编译的是否成功也是 android opencv 编程及编译的
2. Ubuntu 下 codeblocks Opencv 开发环境配置
2.1 下载安装 codeblocks
2.2 打开 cldeblocks 建立一个摄像头的测试程序:
#include<highgui.h>
int main()
{int c;IplImage *img;CvCapture* capture = cvCaptureFromCAM(-1);cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);cvMoveWindow("mainWin", 50, 50);while(1){img=cvQueryFrame(capture);cvShowImage("mainWin", img );c=cvWaitKey(10);//按 ESC 键离开if(c == 27)break;}cvReleaseImage(&img);cvDestroyWindow("mainWin");return 0;
}
2.3 配置工程的头文件和链接库

然后配置路径:


运行按钮,进行编译测试。
相关参考网址:编译 Ubuntu 下 Opencv:http://blog.csdn.net/huangmou37/article/details/6207800编译 opencv forAndroid:http://hi.baidu.com/cwyalpha/item/b76f6cc0601a522def46652d官方编译 for android: http://opencv.willowgarage.com/wiki/Android2.2官方配置 for codeblocks :http://opencv.willowgarage.com/wiki/CodeBlocks配置 for codeblocks:http://blog.csdn.net/hitwengqi/article/details/7985343
3. Windows7 + codeblocks Opencv 开发环境搭建
3.1 下载 opencv2.2
网址: http://www.opencv.org.cn/index.php/Download#Version_2.2
直接下载网址:http://www.opencv.org.cn/download/OpenCV-2.2.0-win.zip
3.2 解 压 OpenCV-2.2.0-win.zip 到 E:\OpenCV-2.2.0,并且建立空文件夹 E:\OpenCV-2.2.0-build
3.3 下载 CMake2.8
网址:http://www.cmake.org/cmake/resources/software.html
3.4 安装 CMake 按照默认的配置,一路 next
3.5 打开 CMake

3.6 环境变量的设置
方法:

环境变量的设置

3.7 在 CMake 中点击 configure

configure 之后,再点击 generate 生成。这时 E:\OpenCV-2.2.0-build 下会生成 lib 目录。
3.8 编译 oepncv 源码
3.8.1 先进入 E 盘

3.8.2 进入目录 OpenCV-2.2.0-build
输入 cd OpenCV-2.2.0-build
3.8.3 编译 opencv 源码
在命令行下输入 :mingw32-make

然后需要等待很久,进行编译
3.8.4 安装 opencv 库文件

完成之后会在 OpenCV-2.2.0-build/lib 文件夹下会生成库文件:
会在 OpenCV-2.2.0-build/include 文件加下会生成头文件:
3.9 使用 codeblocks 建立 openv 工程

输入文件名(opencv_test),选择存放的目录,然后点击 Finish
3.10 测试代码
#include <highgui.h>
int main()
{int c;IplImage *img;CvCapture* capture = cvCaptureFromCAM(-1);//此处-1 代表自动检测cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);cvMoveWindow("mainWin", 50, 50);while(1){img=cvQueryFrame(capture);cvShowImage("mainWin", img );c=cvWaitKey(10);if(c == 27)break;}cvReleaseImage(&img);cvDestroyWindow("mainWin");return 0;
}
但是此时编译还不能成功,因为 codeblocks 的编译器还不知道 opencv 的头文件和相应的库文件的位置,在编译的时候就无法进行 include 的链接库文件。
3.11 给工程文件添加 opencv 相关路径

然后添加 opencv 的相关搜索路径,在 Search directories 下



3.12 编译工程文件
注:如果不添加环境变量,也可以在 CMake 中配置的时候选中特殊的本地编译器,然后选择刚刚 codeblocks 安装目录中的相应 MinGW 编译器。
C 编译器:C:\Program Files (x86)\CodeBlocks\MinGW\bin\gcc.exeC++ 编译器: C:\Program Files (x86)\CodeBlocks\MinGW\bin\g++.exe
🌟全文共 8911 个字,码字总结不易,老铁们来个三连:点赞、关注、评论🌟
🌟作者:左手の明天🌟
🌟原创不易,转载请联系作者并注明出处🌟
相关文章:

【OpenCV图像处理系列一】OpenCV开发环境的安装与搭建(Ubuntu + Window都适用)
🔗 运行环境:OpenCV,Ubuntu,Windows 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### &#x…...

【代码随想录】-动态规划专题
文章目录理论基础斐波拉契数列爬楼梯使用最小花费爬楼梯不同路径不同路径 II整数拆分不同的二叉搜索树背包问题——理论基础01背包二维dp数组01背包一维数组(滚动数组)装满背包分割等和子集最后一块石头的重量 II目标和一和零完全背包零钱兑换 II组合总和…...
c++数据类型 输入输出
C++语法 //常用包: iostream:cin cout endl cstdio:scanf printf algorithm:max min reverse swap cstring:memset memcpymemset(a,-1,sizeof a) 填充数组memcpy(b,a,sizeof a) 将a数组复制到b数组,长度是a数组字节长度 cmath:sin sqrt pow abs fabs编程是一种控制计…...

【设计模式-11】责任链模式
认识设计模式(十一)---责任链模式【一】责任链模式【二】介绍(1)意图(2)主要解决(3)何时使用(4)如何解决(5)关键代码(6&am…...

SpringBoot+Vue实现智能物流管理系统
文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...
【MT7628】MT7628如何修改串口波特率、调试串口物理口、使用UART3口
环境说明 sdk版本:Mediatek_ApSoC_SDK_4320_20150414.tar.bz2 芯片方案:MT7628A Uboot修改串口波特率方法 修改rt2880.h文件 修改include/configs/rt2880.h文件CONFIG_BAUDRATE宏的值 - #define CONFIG_BAUDRATE 57600 +#define CONFIG_BAUDRATE 115200 Kernel中修改串口波特…...
css盒模型介绍
在使用CSS进行网页布局时,我们一定离不开的一个东西————盒子模型。盒子模型,顾名思义,盒子就是用来装东西的,它装的东西就是HTML元素的内容。或者说,每一个可见的 HTML 元素都是一个盒子,下面所说的盒子…...
onetab 谷歌插件历史数据清除
文章目录方法1:测试也可以步骤1:批量执行点击步骤2:python 脚本模拟点击确定操作方法2:成功【推荐】步骤1:修改confirm,类似于hook操作步骤2:批量点击删除操作:onetab 谷歌插件历史数…...

GRBL源码简单分析
结构体说明 GRBL里面的速度规划是带运动段前瞻的,所以有规划运动段数据和微小运动段的区分 这里的“规划运动段”对应的数据结构是plan_block_t,前瞻和加减速会使用到,也就是通过解析G代码后出来的直接直线数据或是圆弧插补出来的拟合直线数据…...
第一部分:简单句——第一章:简单句的核心——二、简单句的核心变化(谓语动词的情态)
二、简单句的核心变化 简单句的核心变化其实就是 一主一谓(n. v.) 表达一件事情,谓语动词是其中最重要的部分,谓语动词的变化主要有四种:三态加一否(时态、语态、情态、否定),其中…...
软考高级考试中有五大证书,其中哪个更值得考?
计算机软考属于专业技术人员职业资格水平评价类,是职业资格、专业技术资格(职称)和专业技术水平"三合一"的考试,是目前IT行业仅有的国家级考试。考试不受学历、专业、资历等条件限制。软考高级考试中有五大证书…...

FlexRay™ 协议控制器 (E-Ray)-04
网络管理 累积的网络管理 (NM) 向量位于网络管理寄存器 1 到网络管理寄存器 3 (NMVx (x = 1-3)) 中。【The accrued Network Management (NM) vector is located in the Network Management Register 1 to Network Management Register 3 (NMVx (x = 1-3)).】 网络管理向量 x…...
container_of 根据成员变量获得包含其的对象的地址!
写在前面 本系列文章的灵感出处均是各个技术书籍的读后感,详细书籍信息见文章最后的参考文献 CONTAINER_OF 在书中发现一个很有意思的宏,以此可以衍生出来其很多的用法,这个宏可以根据某个成员变量的地址得到包含这个成员变量地址的对象的…...

Linux进程概念
Linux进程概念前言冯诺依曼体系操作系统设计操作系统的目的如何理解OS是一款搞“管理”的软件?系统调用和库函数的概念进程的概念描述进程组织进程查看进程fork()前言 本篇博客主要介绍一些:冯诺依曼体系、OS的理解、进程的一些概…...

算法设计与分析
两个例子:调度问题与投资问题 例1:调度问题 问题 有 n 项任务,每项任务加工时间已知.从 0时刻开始陆续安排到一台机器上加工. 每个任务的完成时间是从 0 时刻到任务加工截止的时间. 求: 总完成时间(所有任务完成时间之和)最短…...

C++ 基础
命名空间 在 C/C 中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace 关键字的…...

[golang gin框架] 2.Gin HTML模板渲染以及模板语法,自定义模板函数,静态文件服务
一.Gin HTML 模板渲染全部模板放在一个目录里面的配置方法首先在项目根目录新建 templates 文件夹,然后在文件夹中新建 对应的index.html<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http…...

数据仓库层Repository(CrudRepository、PagingAndSortingRepository、JpaRepository)
什么是数据仓库层Repository? 数据仓库接口的作用:Repository原意指的是仓库,即数据仓库的意思。Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。 Repository接口ÿ…...

大数据技术架构(组件)33——Spark:Spark SQL--Join Type
2.2.2、Join Type2.2.2.1、Broadcast Hash Join (Not Shuffled)就是常说的MapJoin,join操作在map端进行的。场景:join的其中一张表要很小,可以放到Driver或者Executor端的内存中。原理:1、将小表的数据广播到所有的Executor端,利用collect算子…...
Linux: bash起后台进程引发的僵尸进程
1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺。 2. 案例 原来的故事是 这样 的,感兴趣的读者可以直接前往。我从中截取了一段重现故事中问题的代码(对原代码做了小小调整&a…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...