博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
open计算机视觉编程总结
阅读量:4126 次
发布时间:2019-05-25

本文共 1624 字,大约阅读时间需要 5 分钟。

1. OpenCV概述

作为一个跨平台的开源计算机视觉库,OpenCV提供了许多图像处理的强大的API。在计算机视觉的一系列应用,归纳起来,基本方法可以分为传感器数据输入、特征点提取、关键点匹配、计算提取数据并进行分析四大步骤。其中涉及到的一些列算法,无论是前端数据处理,还是后端的滤波优化,均是以得到准确的分析结果为目的而进行的。

2. OpenCV入门

2.1 基本图像处理

众所周知,图像是由一个个像素点按照一定的顺序组合而成的,根据这个原理,对图像的存储,本质上就是对像素构成的矩阵的存储,对图像的操作也就是对像素的操作。

在OpenCV中,最基本的图像数据结构是cv:Mat,用来实例化图像对象,并对此对象进行一系列的操作,如cv:Mat中的at(int x,int y) 就是用来获取图像在(x,y)处的像素值。除此之外,OpenCV还封装了一些基本的处理函数,如图像的装载,翻转,图像格式的转换(如彩色图像与灰度图像的转换),定义ROI(region of interest)等等。

2.2 图像分割

OpenCV中的GrabCut算法可以基于像素特征对图像进行分割:

GrabCut基本思想

1.首先给定一张图片作为测试图片,针对待分离的前景区域画一个框,记录左下角和右下角的位置

2.初始化一个与原图大小相同的掩模,并初始化四个参数GCD_BGD,GCD_FGD, GCD_PR_BGD, GCD_PR_FGD全部为零

PS:参数含义

GCD_BGD(=0),背景;
GCD_FGD(=1),前景;
GCD_PR_BGD(=2),可能是背景;
GCD_PR_FGD(=3),可能是前景。

3.定义前景模型与背景模型,为两个1*56矩阵

4.将定义好的前景模型、背景模型、掩模,并设定一个迭代次数几个参数传至GrabCut算法,计算出一个新的掩模。新的掩模中给出的结果为2或3,即一个像素只存在两种情况:可能是背景、可能是前景。
5.将掩模中的2改为0.3改为1,并于原始图像对点对点乘积。使得原始图像中背景部分全部为0,前景部分则保持不变。

2.3 直方图统计像素及其应用

1.直方图统计像素:产生一个二维图像,横轴为像素的编号(以0-255为例),纵轴为像素数量,基于图像中像素的特征,可据此分离前景与背景。

2.像素的修改:

  • 通过修改像素强度的方式提高图像质量。如等比例修改像素的强度值到(0-255)。
  • 通过修改像素数量的方式提高图像质量,原则是:p%像素的强度值必须小于等于255*p%

3.直方图统计像素的应用

  • 反向投影直方图可以检测特定的图像和内容,原理是将每个像素替换为该像素出现的概率值
  • 基于反向投影直方图的方法,可进一步用均值平移法寻找目标。即从初始位置开始,在周围反复移动,以提高局部匹配概率,确定物体的准确位置
  • 完成基于内容的图像检索问题:通过比较直方图搜索相似图像
  • 还可以用积分的方式统计不同大小区域内的像素和,进行图像搜索与匹配

3.基于形态学运算的图像分割和特征检测

3.1 腐蚀和膨胀图像

操作方法:

将原始图像与一定大小的结构元素重合,相交的部分形成一个像素集合,腐蚀就是把当前像素替换为当前像素集合中的像素最小值,而膨胀就是把当前像素替换成当前图像集合中的最大值
原理:
结构元素,本质上是一个a*a的形态学滤波器

3.2 开启和闭合图像

开启和闭合图像只与最基本的腐蚀和膨胀运算有关,开启图像为先做腐蚀运算再做膨胀运算,闭合图像为先做膨胀运算再做腐蚀运算。

3.3 灰度图像中利用腐蚀膨胀运算实现边缘检测

灰度图像中,可以将腐蚀和膨胀后的图像做差值,从而得到图像的边缘。即i边缘检测运算,Beucher运算。除此之外,得到图像边缘还有两种方式,膨胀后的图像和原始图像做差值,原始图像与腐蚀图像做差值。

而开启运算因为先对图像做腐蚀,所以可以消除图像的尖锐部分,闭合运算分析思路类似。

参考链接:

转载地址:http://xeqpi.baihongyu.com/

你可能感兴趣的文章
高德坐标转换百度坐标 javascript
查看>>
tp5封装通用的修改某列值
查看>>
laravel控制器与模型名称不统一
查看>>
vue登录拦截
查看>>
npm配置淘宝镜像仓库以及electron镜像
查看>>
linux设置开机自启动脚本的最佳方式
查看>>
VUE SPA 单页面应用 微信oauth网页授权
查看>>
phpstorm 集成 xdebug 进行调试
查看>>
npm和node升级的正确方式
查看>>
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>