滤波

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 编程入门学习笔记(一): 基本函数介绍的更多相关文章

  1. 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 ...

  2. OpenCV3编程入门读书笔记5-边缘检测

    一.边缘检测的一般步骤 1.滤波 边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能. 2.增强 增强边缘的基础是确定图像各 ...

  3. Lua编程入门-学习笔记2

    第6章 深入函数 函数是一种“第一类值(First-Class Value)”,他们具有特定的词法域(lexical scoping) 将表达式“function(x) <body> en ...

  4. Lua编程入门-学习笔记1

    第1章:起点 Chunks: 语句块 每个语句结尾的分号是可选的,如果同一行有多个语句最好使用分号分隔: dofile("lib1.lua")  -- 执行lua文件 全局变量:局 ...

  5. OpenCV3编程入门读书笔记4-形态学滤波

    一.腐蚀和膨胀 1.腐蚀和膨胀的主要功能 (1)消除噪声 (2)分割出独立的图像元素,在图像中连接相邻的元素 (3)寻找图像中的极大值或者极小值区域 (4)求出图像的梯度 2.膨胀(dilate) 膨 ...

  6. OpenCV3编程入门-读书笔记3-滤波

    一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用 ...

  7. OpenCV3编程入门-读书笔记2-core组件

    一.颜色空间缩减 1.概念 如果图像是3通道,深度为1个字节,则每个像素有256*256*256种可能值,这么多的可能值会对算法性能造成严重影响.利用颜色空间缩减就能解决这个问题,例如将颜色值0~9取 ...

  8. OpenCV3编程入门-读书笔记1

    一.OpenCV概述 1.OpenCV全程Open Source Computer Vision Library,即开源计算机视觉库.它是一个跨平台的开源计算机视觉库,可以运行在windows.lin ...

  9. 【浅墨著作】《OpenCV3编程入门》内容简单介绍&amp;勘误&amp;配套源码下载

    经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...

随机推荐

  1. Thread API的详细介绍

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurr ...

  2. .NET CORE 多语言实现方案

    根据市场需求,基于.NET CORE平台开发的RoadFlow工作流平台需要实现多语言版本.经过方案讨论和比对,决定采用.NET自带的本地化功能来实现多语言.话不多说,直接上实现方式. 首先修改Sta ...

  3. Python登录豆瓣并爬取影评

    上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自 ...

  4. Hive的查询

    基本查询 全表和特定列查询 1.全表查询 select * from emp; 2.选择特定列查询 select empno,ename from emp; 注意: 1.SQL语言大小写不敏感 2.S ...

  5. 2017day2

    系统模块: # Author: sonny# -*- coding:utf-8 -*-import sys; #print(sys.path);print(sys.argv);print(sys.ar ...

  6. SQL Server 保存特殊字符时乱码

    场景:协同完成的项目,数据库是同事创建,我们共同使用的表. 客户反应有一些字符查看的时候出现乱码.第一反应是否编码规则的问题.后来去数据库查发现数据库里就是乱码,百度了一下发现说特殊字符要保存在NVA ...

  7. Cesium 学习(三)各种资源链接

    1.前言 前面已经介绍如何获得以及安装部署Cesium,接下来分享下学习资源链接,其中访问最多的是官网以及超图.火星的demo网站. 2.官网地址及介绍 官网:https://cesiumjs.org ...

  8. Java EE.Servlet.处理请求

    Servlet的核心工作便是处理客户端提交的请求信息,生成动态响应信息返回客户端. 1.请求参数 POST方法一般用于更新服务器上的资源,当时用POST方法时,提交的数据包含在HTTP实体内,而GET ...

  9. 关于java飞机躲炮弹的一些对象说明(带源码)

    1.飞机躲炮弹的各种实体类都需要一个画笔将他们画出来 (GameObject) import java.awt.*; public void drawSelf(Graphics g){ g.drawI ...

  10. 入门webpack,看这篇就够了

    什么是webpack? 官网给出的概念是:本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递 ...