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.mzph.cn/news/601229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装PyTorch及环境配置(应用于Python上的YOLO)

这个基本都是Bilibili网站里面叫“小手丫子”up的视频教程&#xff0c;此前自己需要装了好几次又卸载了好几次&#xff0c;现在根据视频教学整理出来自己所理解的文档。 注意事项 1.安装的pycharm版本和anaconda版本无要求。 2.运行pycharm尽量以管理员身份运行。 3.Cuda是独…

AWTK 开源串口屏开发(5) - MCU端 SDK 用法

AWTK 开源智能串口屏&#xff0c;不但开放了串口屏端全部源码&#xff0c;还提供了MCU 端 SDK&#xff0c;大大加快 MCU 软件的开发。本介绍一下 MCU 端 SDK 在不同平台上的用法。 完整示例可以参考下面的几个例子&#xff1a; 普通嵌入式系统 mcu/stm32/hmi_app/hmi_app.c 低…

docker +gitee+ jenkins +maven项目 (二)

文章目录 前言一、创建Maven项目二、常规配置1.gitee配置2.gitee仓库配置3.构建时操作4.构建后操作 总结 前言 上一篇文章介绍了Jenkins的环境配置和工具配置&#xff0c;这篇进行具体maven项目的配置 一、创建Maven项目 二、常规配置 1.gitee配置 在工具哪里配置好gitee后&…

设计模式② :交给子类

文章目录 一、前言二、Template Method 模式1. 介绍2. 应用3. 总结 三、Factory Method 模式1. 介绍2. 应用3. 总结 参考内容 一、前言 有时候不想动脑子&#xff0c;就懒得看源码又不像浪费时间所以会看看书&#xff0c;但是又记不住&#xff0c;所以决定开始写"抄书&qu…

JMeter之测试WebService接口

JMeter之测试WebService接口 1 背景2 目的3 介绍4 具体操作4.1 soapUI调用4.2 JMeter工具调用4.3 操作步骤流程4.3 重点 1 背景 WebService应用的范围是非常广&#xff0c;任何需要跨平台、跨系统进行数据交换和功能调用的场景都可以用此来实现&#xff0c;在实际的工作中也常常…

Unity中Shader的_Time精度问题

文章目录 前言一、U方向上优化二、V方向上优化在这里插入图片描述 三、最终代码1、效果2、Shader 前言 在Unity的Shader中&#xff0c;使用了_Time来达到UV的流动效果&#xff0c;普遍会出现一个问题。我们的UV值会随着时间一直增加&#xff08;uv值增加了&#xff0c;但是因为…

3元一平方公里的在线卫星影像

我们为大家分享了免费下载卫星影像的方法。 但让人遗憾的是&#xff0c;该影像的最高分辨率只有10米&#xff0c;需要更高清且比较新的卫星影像&#xff0c;看来还是得付费购买才比较靠谱。 自助选择区县范围 商业卫星影像主要面向企事业单位&#xff0c;一般来讲都比较贵&a…

Windows安装DolphinDB,配置单节点启动与GUI

1. 安装Java 首先&#xff0c;进入网址&#xff1a;jdk11 下载jdk-11.0.20_windows-x64_bin.exe&#xff0c;然后安装即可 安装完成后&#xff0c;打开命令提示符&#xff0c;输入&#xff1a; java javac如果这两个命令都出现一大堆东西&#xff0c;而不是找不到指令的提示的…

物联网云平台源码,Spring Cloud智慧工地源码,建筑施工智能化管理

智慧工地以物联网云平台为核心&#xff0c;基于智慧工地物联网云平台与现场多个子系统的互联&#xff0c;实现现场各类工况数据采集&#xff0c;存储、分析与应用。通过接入智慧工地物联网云平台的多个子系统板块&#xff0c;根据现场管理实际需求灵活组合&#xff0c;实现一体…

玩转Python:用Python处理文档,5个必备的库,特别实用,附代码

在Python中&#xff0c;有几个流行的库用于处理文档&#xff0c;包括解析、生成和操作文档内容。以下是一些常用的库及其简介和简单的代码示例&#xff1a; PyPDF2 - 用于处理PDF文件。 简介&#xff1a;PyPDF2是一个纯Python库&#xff0c;用于分割、合并、转换和提取PDF文件中…

Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models

ABSTRACT 现代大规模视觉-语言模型&#xff08;LVLMs&#xff09;采用了相同的视觉词汇-CLIP&#xff0c;可以涵盖大多数常见的视觉任务。然而&#xff0c;对于一些需要密集和细粒度视觉感知的特殊视觉任务&#xff0c;例如文档级OCR或图表理解&#xff0c;尤其是在非英语环境…

卷积神经网络(CNN)、循环神经网络(RNN)和自注意力(self-attention)对比

考虑同一个的问题&#xff1a;将由个词元组成的序列映射到另一个长度相同的序列&#xff0c;其中的每个输入词元或输出词元由维向量表示。 我们将比较能够解决上述问题的三种常用方法&#xff1a;卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#x…

Verifiable Credentials可验证证书 2023 终极指南

1. 引言 Dock公司为去中心化数字身份领域的先驱者&#xff0c;其自2017年以来&#xff0c;已知专注于构建前沿的可验证证书&#xff08;Verifiable Credentials&#xff09;技术。本文将阐述何为电子证书、电子证书工作原理、以及其对组合和个人的重要性。 伪造实物证书和数字…

单元测试、系统测试、集成测试知识总结

一、单元测试的概念 单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff0c;有可能对应多个程序文件中的一组函数。 单元也具有一些基本的属性。比如&#xff1a;明确的功能、规格定义&#…

win10报错“api-ms-win-crt-string-l1-1-0.dll文件丢失,软件无法启动”,快速修复方法,亲测有效

api-ms-win-crt-string-l1-1-0.dll是Windows操作系统中的一个动态链接库文件&#xff0c;属于Microsoft C Runtime Library。它包含了Windows操作系统需要运行C程序的一些基本系统函数&#xff0c;比如字符串处理、内存分配等。 它的作用主要是提供一些基本的、用于支持C语言编…

算法每日一题: 被列覆盖的最多行数 | 二进制 - 状态压缩

大家好&#xff0c;我是星恒 今天的题目又是一道有关二进制的题目&#xff0c;有我们之前做的那道 参加考试的最大学生数的 感觉&#xff0c;哈哈&#xff0c;当然&#xff0c;比那道题简单多了&#xff0c;这道题感觉主要的考点就是二进制&#xff0c;大家可以好好总结一下这道…

04、Kafka ------ CMAK 各个功能的作用解释(Cluster、集群、Broker、位移主题、复制因子、领导者副本、主题)

目录 启动命令&#xff1a;CMAK的用法★ 在CMAK中添加 Cluster★ 在CMAK中查看指定集群★ 在CMAK中查看 Broker★ 位移主题★ 复制因子★ 领导者副本和追随者副本★ 查看主题 启动命令&#xff1a; 1、启动 zookeeper 服务器端 小黑窗输入命令&#xff1a; zkServer 2、启动 …

苹果电脑Markdown写作工具:ulysses mac软件介绍

ulysses for mac是一款Markdown写作工具&#xff0c;支持Markdown拼写检查、语音识别、iCloud同步、版本管理等功能&#xff0c;并且可以导出为 PDF、word、RTF、TXT、Markdown、HTML 和 ePub等文件格式。 ulysses for mac软件介绍 适用于Mac&#xff0c;iPad和iPhone的终极写…

试除法判定质数算法总结

知识概览 质数的定义 在大于1的整数中&#xff0c;如果只包含1和本身这两个约数&#xff0c;就被称为质数&#xff0c;或者叫素数。 质数的判定——试除法 暴力算法 时间复杂度 改进算法 时间复杂度 暴力算法&#xff1a;时间复杂度O(n) 算法模版 bool is_pr…

Idea live template

1:打印入参日志的配置 log.info("$methodName$ 方法入参: $argsLog$",$argsJson$); methodName:methodName() argsLog:groovyScript( "def result; def params\"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList(); for(i 0; i <…