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);                   //等待任意按键按下
}
相关推荐
奈斯先生Vector4 分钟前
从 127.0.0.1:3080 到插件运行时:DeepSeek Harness 远程开发与版本治理实战
linux·运维·人工智能·ubuntu·aigc
joinwell527 分钟前
AI Agent 的技能不是工具权限:为什么“会怎么做”和“允许做什么”必须分开?
人工智能
IT_陈寒12 分钟前
Vite动态导入差点让我秃头,原来问题出在这
前端·人工智能·后端
luckystar513~15 分钟前
自己动手写Agent Harness【agent tools】:给它装手和眼睛(工具注册与执行流水线)
人工智能
草莓橙子碗18 分钟前
Claude 使用指南
开发语言·python
工具分享27 分钟前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI40 分钟前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
官乐41 分钟前
AI面试指南(多agent开发流程)
人工智能·面试·职场和发展
学习zhao极致it44 分钟前
AI量化交易训练营(完结)
人工智能
老郑聊AI业财智造44 分钟前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程