opencv3 编程入门学习笔记(一): 基本函数介绍

滤波
blur (均值滤波)
均值滤波是典型的线性滤波算法, 主要方法为领域平均法(即用一片图像区域的各个像素的平均值来代替原图像中的各个像素值)
缺点: 不能很好的保护图像细节, 在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊。
函数原型:
void blur(InputArray src, OutputArrary dst, Size ksize , Point anchor=Point(-1, -1), int borderType = BORDER_DEFAULT)
ksize : 核大小(kerneal size ), 有点类似卷积核
阈值化
阈值可以被视为最简单的图像分割方法(基于图像中物体与背景之间的灰度差异)。
为了从图像中提取我们需要的部分, 应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并进行相应的判断。一旦找到了需要分割的物体的像素点,可以对这些像素点设定一些特定的值来表示。可以将物体的像素点的灰度值设为 ”0“ (黑色), 其他像素点的灰度值为 ”255“ (白色)
threshold (固定阈值操作)
对灰度图像进行阈值操作,得到二值图像
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type)
src: 输入单通道数组
dst: 处理后的结果
thresh: 阈值的具体值
maxval: 当像素值满足条件时,给该像素赋的值
type : CV_THRESH_BINARY 、CV_THRESH_BINARY、CV_THRESH_BINARY_INV



寻找轮廓
findContours(InputArray img, OutputArray conours, OutputArray hierarchy, int mode, int method, Point offset=Point())
img: 输入图像, 需要为8 位 单通道图像
contours: 每个轮廓为一组点向量
hierarchy:
mode: 轮廓检索模式,。 详细介绍如下

method: 轮廓的近似办法

CHAIN_APPROX_NONE : 获取每个轮廓的每个像素, 相邻的两个点的像素位置不超过 1
CHAIN_APPROX_SIMPLE: 压缩水平方向, 垂直方向, 对角线方向的元素(一个矩形只需要 4 个点来保存轮廓信息)
morphologyEx
没有
仿射变换
在向量中进行一次线性变换(乘以一个矩阵) 并加上一个平移(加上一个向量), 变换为另一个向量的过程。
warpAffine(InputArray src, OutputArray dst, InputArray M, Size dsize, int flags=INTER_LINEAR, int borderMode=BORDER_CONSTANT, const Scalar & borderValue = Scalar())
通过转换矩阵转换 dst(x,y) = src(M11x + M12y + M13, M21x + M22y + M23)
参数:
src: 输入图像矩阵
dst: 输出图像矩阵
M : 2 x 3 转换矩阵
dsize: 输出图像尺寸
flags: 插值算法标识符(默认 INTER_LINEAR )
平移:
// 偏移矩阵 2 x 3, 类型 float32
Mat transformMat = Mat::eye(, , CV_32F);
int m = max(w, h); transformMat.at<float>(, ) = m / - w / ; // x 方向偏移值
transformMat.at<float>(, ) = m / - h / ; // y 方向偏移值 Mat warpImage(m, m, in.type());
warpAffine(in, warpImage, transformMat, warpImage.size(), INTER_LINEAR, BORDER_CONSTANT, Scalar());
获取旋转矩阵
getRotationMatrix2D(Point2f center, double angle, double scale)
center: 矩阵中心
angle : 旋转角度
scale : 比例
获取点向量围成的最小矩阵
Rect rect = boudingRect (inputArray points)
创建一个指定大小和类型的尺寸
Mat::eye (int rows, int cols, int type)
膨胀与腐蚀:
这两个操作都是对图像中 高亮(白色) 区域而言, 膨胀则高亮区域增大, 腐蚀则高亮区域变小,暗黑区域变多(黑色区域增大)。
开运算与闭合运算
开运算: 分开对象。 相当于对图像先进行腐蚀运算再进行膨胀运算,可以消除离散点和"毛刺",可以将两个物体分开。
闭运算: 连接相邻对象。 相当于对图像先进行膨胀运算再进行腐蚀运行,可以填充图像的内部孔洞和图像的凹角点,可以把两个邻近的目标连接起来。
morphologyEx(const Mat &src, Mat &dst, int op, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
op: MORPH_OPEN(开运算)、MORPH_CLOSE(闭运算)、MORPH_GRADIENT (形态学梯度)、 MORPH_TOPHAT (顶帽)
kernel: 运算内核,配合getStructuringElement函数使用
getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1))
shape: MORPH_RECT、MORPH_CORSS、MORPH_ELLIPSE(椭圆形);
size : 一般取 Size(3,3)
opencv3 编程入门学习笔记(一): 基本函数介绍的更多相关文章
- cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例
cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...
- OpenCV3编程入门读书笔记5-边缘检测
一.边缘检测的一般步骤 1.滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能. 2.增强 增强边缘的基础是确定图像各 ...
- Lua编程入门-学习笔记2
第6章 深入函数 函数是一种“第一类值(First-Class Value)”,他们具有特定的词法域(lexical scoping) 将表达式“function(x) <body> en ...
- Lua编程入门-学习笔记1
第1章:起点 Chunks: 语句块 每个语句结尾的分号是可选的,如果同一行有多个语句最好使用分号分隔: dofile("lib1.lua") -- 执行lua文件 全局变量:局 ...
- OpenCV3编程入门读书笔记4-形态学滤波
一.腐蚀和膨胀 1.腐蚀和膨胀的主要功能 (1)消除噪声 (2)分割出独立的图像元素,在图像中连接相邻的元素 (3)寻找图像中的极大值或者极小值区域 (4)求出图像的梯度 2.膨胀(dilate) 膨 ...
- OpenCV3编程入门-读书笔记3-滤波
一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用 ...
- OpenCV3编程入门-读书笔记2-core组件
一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取 ...
- OpenCV3编程入门-读书笔记1
一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.lin ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
随机推荐
- 【并查集】连接格点-C++
连接格点 描述 有一个M行N列的点阵,相邻两点可以相连.一条纵向的连线花费一个单位,一条横向的连线花费两个单位.某些点之间已经有连线了,试问至少还需要花费多少个单位才能使所有的点全部连通. 输入 第一 ...
- 下载历史版本CentOS
搜索centos 进入主页面向下移动滚动找到 点击后向下移动,选择需要的版本进行tree 选择 OK!
- Spring Cloud中Hystrix、Ribbon及Feign的熔断关系是什么?
导读 今天和大家聊一聊在Spring Cloud微服务框架实践中,比较核心但是又很容易把人搞得稀里糊涂的一个问题,那就是在Spring Cloud中Hystrix.Ribbon以及Feign它们三者之 ...
- 安科 OJ 1190 连接电脑 (并查集)
时间限制:1 s 空间限制:128 M 传送门:https://oj.ahstu.cc/JudgeOnline/problem.php?id=1190 题目描述 机房里有若干台电脑,其中有一些电脑已经 ...
- Python_我的学习笔记 (博客停更------)
贡献一张PyCharm快捷键图(图片是借用他人的)----------建议最大化查看,因为这样不会破坏布局 注:部分内容引用小甲鱼,其他等网页,网站内容.如有冒犯,请联系我. 2019.07.21 ...
- Uploadify.js引用导致浏览器宽度计算错误,布局混乱
首先,本人新手,高手勿喷,请忽略.谢谢. 今天在写代码的时候遇到一个奇葩问题,我再在页面加载完成以后,动态计算DIV宽度,将整个层铺满浏览器.一切正常.单当我引入jquery.uploadify.js ...
- Java Web项目案例之---登录和注册(精华版)
登录和注册(精华版) (一)实现功能 1.使用cookie记录登录成功的用户名,用户选择记住用户名,则用户再次登录时用户名自动显示 2.实现文件上传功能(上传文件的表单上传于普通的表单上传不同,必须是 ...
- STL map 详细用法
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个称为该关键字的值)的数据 处理能力. 需要的库 #include <map> ...
- spark 源码分析之七--Spark RPC剖析之RpcEndPoint和RpcEndPointRef剖析
RpcEndpoint 文档对RpcEndpoint的解释:An end point for the RPC that defines what functions to trigger given ...
- 使用Java实现数据库编程 项目(宠物商店)
创建数据库代码: DROP DATABASE IF EXISTS petShop; CREATE DATABASE petShop; USE petShop; /*创建表*/ CREATE TABLE ...