OpenCV图像处理|1.1 OpenCV介绍与环境搭建

1.1.1 介绍
OpenCV(Open Source Computer Vision Library)开放源代码计算机视觉库,主要算法涉及图像处理、计算机视觉和机器学习相关方法。OpenCV 其实就是一堆 C 和 C++语言的源代码文件,这些源代码文件中实现了许多常用的计算机视觉算法。OpenCV 可用于开发实时的图像处理、计算机视觉以及模式识别程序。

OpenCV由一系列C函数和C++类构成,它有C,C++,Python和java接口,当前SDK(Software Development Kit软件开发工具包) 已经支持C++、Java、Python等语言应用开发, 当前OpenCV本身新开发的算法和模块接口都是基于C++产生。

其覆盖了工业产品检测、医学成像、无人机飞行、无人驾驶、安防、 卫星地图与电子地图拼接、信息安全、用户界面、摄像机标定、立体视觉和机器人等计算机视觉应用领域。

OpenCV是最初由英特尔公司发起并开发,以 BSD 许可证授权发行,可以在商业和研究领域中免费使用,现在美国机器人公司Willow Garage 为 OpenCV 提供主要的支持。主要贡献人物李信弘( Shinn Lee)、Vadim Pisarevsky、Gary Bradski。 (其他付费的机器视觉开发包Matlab、Halcon、VisonPro、Sapera、EVision)。

opencv官网:https://opencv.org/
opencv库各版本下载:https://sourceforge.net/projects/opencvlibrary/files/?source=navbar https://opencv.org/releases.html
opencv中文网站论坛:http://www.opencv.org.cn/
opencv 1.x中文文档:http://wiki.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5
opencv 2.3文档:http://www.opencv.org.cn/opencvdoc/2.3.2/html/index.html
opencv 3.4文档:https://docs.opencv.org/master/

图像处理(Image Processing)是用计算机对图像进行分析,以达到所需结果的技术。图像处理技术一般包括图像压缩,增强和复原,匹配、描述和识别3个部分。数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像是指用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。

计算机视觉(Computer Vision)是指用摄像机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使之成为更适合人眼观察或仪器检测图像的一门学科。

1.1.2 体系结构

将每个模块中的源文件编译成一个库文件 ,用户在使用时, 仅将所需的库文件添加到自己的项目中,与自己的源文件一起连接成可执行程序即可。

视觉本质上分为3部分:图像处理、模式分类(Object Detection、Machine Learning、2D Feature)、场景处理(相机校正和三维重建)。
旧版opencv包含如下部分:

OpenCV主要lib的作用:
opencv_core : core函数库(基本的数据结构,架构和线性代数, DFT, xml 和yam i/o接口函数等)
opencv_imgproc / opencv_imgcodecs: -图像处理函数库(滤波,高斯模糊,形态学膨胀/腐蚀,线性缩放图像大小,图像几何变化,颜色结构变化,计算直方图等)
opencv_highgui : 用户交互部分,GUI,图像和视频窗口函数库
opencv_ml :统计机器学习模型函数库( SVM,决策树,级联等)
opencv_features2d :二维特征检测器和描述子函数库( SURF,FAST 等,包括一种新的特征描述子匹配结构)
opencv_video :动态分析和物体追踪函数库(光流法,移动模板,背景消除)
opencv_objdetect :图像目标检测函数库( haar小波 & LBP人脸检测和识别, HOG人检测等)
opencv_calib3d :摄像头标定,视觉匹配和三维数据处理函数库
opencv_flann :近似最近领域搜索库和OpenCV分装器
opencv_contrib :最新贡献但不是很成熟的函数库
opencv_legacy :过时代码,为了后续代码兼容性而存在
opencv_gpu :用CUDA来加速一些openCV函数的类库(相对不太稳定,但对openCV开发非常有帮助)

OpenCV中已经包含如下核心功能

  • 二维和三维特征工具箱
  • 运动估算
  • 人脸识别系统
  • 姿势识别
  • 人机交互
  • 移动机器人
  • 运动理解
  • 对象鉴别
  • 分割与识别
  • 立体视觉
  • 运动跟踪
  • 增强现实(AR技术)
    基于上述功能实现需要,OpenCV中还包括以下基于统计学机器学习库
  • Boosting算法
  • Decision Tree(决策树)学习
  • Gradient Boosting算法
  • EM算法(期望最大化)
  • KNN算法
  • 朴素贝叶斯分类
  • 人工神经网络
  • 随机森林
  • 支掌向量机
    详细模块介绍见《OpenCV3编程入门》/毛星云。

1.1.3 搭建开发环境
一、Windows+Visual Studio+OpenCV3.4
(1)安装VS2017
软件下载地址https://www.visualstudio.com/zh-hans/
(2)下载OpenCV3.4
(3)配置windows环境变量:
加分号粘贴到Path ;E:\OpenCV\opencv3.4\build\x64\vc15\bin

(4)在VS2017配置属性管理器Debug x64:
VC++目录:
(Include Directories)
包含目录(头文件)E:\OpenCV\opencv3.4\build\include
E:\OpenCV\opencv3.4\build\include\opencv
E:\OpenCV\opencv3.4\build\include\opencv2
(Library Directories)
库目录(库文件) E:\OpenCV\opencv3.4\build\x64\vc15\lib
连接器-输入:
(Linker-Input-Additional Dependencies)
附加依赖项 opencv_world320d.lib
创建工程:

属性设置:

图片步骤也可详见OpenCV3.2.0+VS2017开发环境配置http://blog.csdn.net/sinat_36264666/article/details/73135823?ref=myread###;
二、Ubantu+OpenCV3
官方安装教程https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
(1)安装编译环境及相关库
■ 编译库,gcc和g++即C和C++的编译库。
sudo apt-get install build-essential
■ 必须库,cmake库用来编译,其他主要是图片和视频输入输出编码解码要调用的库。
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
■ 可选库,主要是python库,简单功能可用python实现。
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-de
问题:
1) 若sudo apt-get install build-essential安装不成功?要安装的软件包的依赖包版本较低?(类似问题https://www.zhihu.com/question/35133998 )
先安装aptitude,它可以比apt-get更加智能地解决依赖问题:
sudo apt-get install aptitude //接下来选y
使用aptitude,会列出问题解决方案:
sudo aptitude install build-essential //选n不接受此方案,并会自动更换;选y接受(我这里是选了一次n,最后选了y)

安装好后用sudo apt-get install build-essential测试看看是否成功:

2) libgtk2.0-dev无法安装?依赖包的问题?
libgtk2.0-dev : 依赖: libgtk2.0-0 (= 2.24.23-0ubuntu1) 但是 2.24.23-0ubuntu1.1 正要被安装
依赖: libpango1.0-dev (>= 1.20) 但是它将不会被安装
依赖: libcairo2-dev (>= 1.6.4-6.1) 但是它将不会被安装
推荐: debhelper 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决方法:(更新系统法,此种方法可能也可以解决上面的问题1)
打开设置里的software & update,在 updates 中 把 important security updates 和 Recommended updates 勾选上(立即更新弹出时点取消),再输入sudo apt-get update即可。然后必须库和可选库中的就都可以安装成功了,安装完要5分钟左右,成功后类似下图。
(或者更改源法见http://blog.csdn.net/fireflychh/article/details/78201054 )

(2)下载opencv源代码,解压后移至Ubantu共享文件夹下
下载地址: https://opencv.org/releases.html(比较慢)

(3)建build文件夹
在源码opencv文件夹下新建build文件夹并进入 :(它用来存放生成的makefile、项目文件以及对象文件和输出二进制文件等编译文件)
cd ~/mywinshare/opencv_install/opencv
mkdir build
cd build

(4)cmake编译源码(包括opencv_contrib部分)
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=~/mywinshare/opencv_install/opencv_contrib/modules/ -D CMAKE_INSTALL_PREFIX=/usr/local …

编译成功如下图:

问题:
1)ippicv_linux_20151201.tgz国内被墙了,有时候下载不成功或者提出hash值不对?

解决方法:
从百度云盘的源码资料ippicv_linux_20151201.tgz替换到对应的目录( <opencv目录>/3rdparty/ippicv/
downloads/linux-808b791a6eac9ed78d32a7666804320e/ippicv_linux_20151201.tgz)

(5)编译安装opencv库到系统,大概需要15~20分钟
make -j7 &&make install

问题:
1)编译失败?
待解决。。。

安装好后的库文件如下图,这样OpenCV就可以使用了。

1.1.4 程序测试 - 图像显示

/*测试程序-图像显示1*/
#include <opencv2/opencv.hpp> //包含头文件
#include <iostream> 
using namespace cv;      //使用命名空间cv,下面的cv::line等的前缀可以不写
using namespace std;    //使用命名空间std,可以调用C++标准库里面的函数或类
int main(int argc, char** argv) {    //argc 表示命令行输入参数的个数(以空白符分隔),argv中存储了所有的命令行参数
 Mat src = imread("E:/OpenCV/testimage/test.png");     //载入图像
 if (src.empty()) {                    //是不是为空
               printf("could not load image...\n");
 return -1;
        }
        namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);  //创建窗口,自动大小
        imshow("test opencv setup", src);            //显示图像,窗口标题
        waitKey(0);                       //x=0无限等待下去,直到有按键按下,等待用户按键退出程序
 return 0;
}
CPP 复制 全屏

2

/*测试程序-图像显示2*/
#include <opencv2/opencv.hpp> //包含头文件
using namespace cv;      //使用cv命名空间,下面的cv::line等的前缀可以不写
void main() {
 Mat src = imread("E:/OpenCV/testimage/test.png");  //载入图像
        imshow("test opencv setup", src);          //显示图像,在3.x的版本里可以省略namedWindow,它会自动创建
        waitKey(0);                   //等待任意按键按下
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/300550.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧医院预约及支付平台—智慧支付

医保支付流程 自费支付流程 智慧医院支付业务介绍 社保卡绑定(身份认证) 认证方案:银行身份已验证客户,可通过本人银行登记的手机号码登录医院APP后,在完善APP注册身份信息时,将相关信息发送苏州银行,由银行核对客户身份信息正确性并将社保卡绑定本人手机。核实后的身份…

Java:File类详解

文章目录 1、概述2、创建File实例3、常用方法3.1 获取功能的方法3.2 绝对路径和相对路径3.3 判断功能的方法3.4 创建删除功能的方法3.5 文件过滤功能的方法 4、文件夹的遍历5、综合练习5.1 创建文件夹5.2 查找文件&#xff08;不考虑子文件夹&#xff09;5.3 查找文件&#xff…

视频剪辑技巧:添加srt字幕,提升视频品质的方法

在视频制作和剪辑过程中&#xff0c;字幕的添加是一项常见的技巧。通过添加srt字幕&#xff0c;可以提升视频的品质和观感&#xff0c;让观众更好地理解视频内容。下面一起来看云炫AI智剪如何批量添加srt字幕的方法&#xff0c;如何通过这些技巧提升视频品质。 原视频画面与添…

XAgent调研

文章目录 1 简介2 快速测试 Quick Start3 结构分析 1 简介 XAgent&#xff08;链接&#xff09;是一个开源的&#xff0c;基于大语言模型的agent构建框架&#xff1b;其目标是构建出能够辅助人类处理各类任务的自动助手 定位&#xff1a;一个全能的&#xff0c;自动的辅助agen…

LeetCode刷题11:滑动窗口解决1423.可获得的最大点数

几张卡牌 排成一行&#xff0c;每张卡牌都有一个对应的点数。点数由整数数组 cardPoints 给出。 每次行动&#xff0c;你可以从行的开头或者末尾拿一张卡牌&#xff0c;最终你必须正好拿 k 张卡牌。 你的点数就是你拿到手中的所有卡牌的点数之和。 给你一个整数数组 cardPoi…

java SSM体育器材租借管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM体育器材租借管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要…

修改Gitee用户名

首先进入首页&#xff0c;点击右上角下拉列表中的账号设置 只想改姓名的话&#xff0c;就只要改下下面这里 还想把个人空间地址改了的话还要改下面这里

Python库学习(十四):ORM框架-SQLAlchemy

1.介绍 SQLAlchemy 是一个用于 Python 的 SQL 工具和对象关系映射&#xff08;ORM&#xff09;库。它允许开发者通过 Python 代码而不是 SQL查询语言来操作数据库。SQLAlchemy 提供了一种灵活且强大的方式来与关系型数据库交互&#xff0c;支持多种数据库后端&#xff0c;如 P…

C语言编译器(C语言编程软件)完全攻略(第二十四部分:Turbo C 2.0使用教程(使用Turbo C 2.0编写C语言程序))

介绍常用C语言编译器的安装、配置和使用。 二十四、Turbo C 2.0使用教程&#xff08;使用Turbo C 2.0编写C语言程序&#xff09; 首先&#xff0c;我们给出一段完整的C语言代码&#xff1a; #include <stdio.h> int main() { puts("hello&#xff0c;world!"…

Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)

目录 一、前言 二、AOP—快速入门 1.动态代理优化 : 2.问题分析 : 3.AOP—基本介绍 : 4.AOP—使用说明 : 5.AOP—入门案例 : 三、AOP—切入点表达式 1.基本说明 : 2.语法格式 : 3.注意事项 : 4.代码演示 : 四、AOP—切入点表达式的更多细节 1.JoinPoint : 1.1 简…

Linux操作系统

Linux操作系统 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Linux安装介绍 2. Linu…

前端效果 登入界面

文章目录 效果展示&#xff1a; 代码&#xff1a; <template><div class"login"><div class"section-1"><div class"card" mouseover"activeCard 1" mouseleave"activeCard 0" click"islogin…

Vue2:脚手架Vue-CLI的使用

一、环境准备 vue脚手架&#xff08;vue-CLI&#xff09;的使用是基于nodejs环境下的。 你可以简单理解为&#xff0c;Java项目需要再jvm虚拟机上才能编译运行 nodejs的作用就是将vue文件编译成html、css、js代码文件。 如何安装nodejs 参考&#xff1a;https://blog.csdn.net…

MBTI职业性格测试 28题(免费版)

MBTI职业性格测试概述 MBTI是现在国际上最为流行的测试工具&#xff0c;利用MBTI职业性格测试&#xff0c;可以清楚地找到自己的性格特点以及兴趣爱好&#xff0c;方便于对职业进行规划、以及改善人际关系。其主要应用心理学常识对个性做出判断&#xff0c;提炼出动力、信息收…

网络通信过程的一些基础问题

客户端A在和服务器进行TCP/IP通信时&#xff0c;发送和接收数据使用的是同一个端口吗&#xff1f; 这个问题可以这样来思考&#xff1a;在客户端A与服务器B建立连接时&#xff0c;A需要指定一个端口a向服务器发送数据。当服务器接收到A的报文时&#xff0c;从报文头部解析出A的…

Spring Security 6.x 系列(15)—— 会话管理之源码分析

一、前言 在上篇 Spring Security 6.x 系列(13)—— 会话管理之会话概念及常用配置 Spring Security 6.x 系列(14)—— 会话管理之会话固定攻击防护及Session共享 中了清晰了协议和会话的概念、对 Spring Security 中的常用会话配置进行了说明,并了解会话固定攻击防护…

thingsboard-gateway使用modbus协议接入设备

thingsboard-gateway使用modbus协议接入设备 前言1.modbus poll下载及配置2.修改tb_gateway.yaml3.修改modbus.json4.重启thingsboard-gateway服务 前言 本文主要介绍thingsboard-gateway使用modbus协议接入设备信息&#xff0c;使用thingsboard-gateway版本为2.5.5.2。 githu…

Linux学习第50天:Linux块设备驱动实验(二):Linux三大驱动之一

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 三、使用请求队列实验 1.实验程序编写 使用开发板上的一段RAM来模拟一段块设备&#xff0c;也就是ramdisk. 机械硬盘 34 #define RAMDISK_SIZE (2 * 1024 * 10…

OpenHarmony应用构建工具Hvigor的构建流程

前言 OpenHarmony 应用和服务使用 Hvigor 作为工程的构建工具。本篇文章将介绍 Hvigor 的构建流程&#xff0c;通过修改脚本配置使 Hvigor 执行自定义任务。 Hvigor 的构建流程 加载命令行参数和环境变量&#xff1b;初始化项目结构&#xff0c;创建 Project 和 Module 实例…

OpenCV | 光流估计

光流估计 光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”&#xff0c;根据各个像素点的速度的速度矢量特征&#xff0c;可以对图像进行动态分析&#xff0c;例如目标跟踪 高度恒定&#xff1a;同一点随着时间的变化&#xff0c;其亮度不会发生改变。小运动&…
最新文章