OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换
腐蚀erode、膨胀dilate
腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的。除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RECT,交叉形MORPH_CROSS,椭圆形MORPH_ELLIPSE。Matlab中会有更多一点的模板。
例如:
Mat element = getStructuringElement(MORPH_RECT,Size(,));
erode(srcImage,dstImage,element);
imshow("腐蚀图",dstImage);
dilate(srcImage,dstImage,element);
imshow("膨胀图",dstImage);
开闭运算、形态学梯度、顶帽、黑帽
开运算是先腐蚀后膨胀的过程,开运算可以用来消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界的同时不明显改变其面积。
闭运算是先膨胀后腐蚀的过程,能够排除小型黑洞(黑色区域),也就是形成连通域。
形态学梯度是膨胀图域腐蚀图之差,可以用来保留物体的边缘轮廓。
顶帽是原图像与开运算的结果图之差,顶帽操作往往用来分离比邻近点亮一点的斑块。在一幅图像具有大幅的背景而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。
黑帽是闭运算结果图与原图像之差,黑帽运算用来分离比邻近点暗一些的斑块。
漫水填充
漫水填充法是一种用特定的颜色填充连通区域,经常被用来标记或者分离图像的一部分进行处理或分析。其实现函数是floodFill。
Rect ccomp;
floodFill(srcImage,Point(,),Scalar(,,),&ccomp,Scalar(,,),Scalar(,,));
imshow("漫水填充图",srcImage);
Point(,)是Point类型的,表示漫水填充的起始点;Scalar(,,)表示像素点被染色的值,即在重绘去油像素的新值;&ccomp 是Rect*类型的,有默认值为0,用于设定floodfill函数将要重绘区域的最小边界矩形区域;第五个参数Scalar(,,)表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度或颜色之负差的最大值;第六个参数Scalar(,,)表示当前观察像素值与其部件邻域像素值或者待加入该部件的种子像素之间的亮度或颜色之正差的最大值;
图像金字塔与图片尺寸缩放
我们经常会将某种尺寸的图像转换为其他尺寸的图像,如果要放大或缩小图片的尺寸,opencv里有两种方法:
() resize函数 最直接
resize(srcImage,dstImage,Size(),0.5,0.5);//缩小为一半
imshow("缩放1/2图",dstImage);
resize(srcImage,dstImage,Size(),,);//放大2倍
imshow("放大2倍图",dstImage);
resize(srcImage,dstImage,Size(srcImage.cols*,srcImage.rows*));//放大3倍
imshow("放大3倍图",dstImage);
上方所有例子的插值方式都是默认的线性插值LITER_LINEAR,还可选择最近邻插值INTER_NEAREST,区域插值INTER_AREA,三次样条插值INTER_CUBIC,Lanczos插值INTER_LANCZOS4。
() pyrUp()、pyrDown()函数,即图像金字塔的对图像向上采样和向下采样操作函数。
一般有两种类型的金字塔:.高斯金字塔,向下采样也就是尺寸缩小,实现函数为pyrUp;.拉普拉斯金字塔,向上采样,也就是图像尺寸放大,实现函数为pyrDown。
与resize函数实现相似, pyrUp(srcImage,dstImage,Size(srcImage.cols*,srcImage.rows*));// 放大2倍
imshow("金字塔放大2倍图",dstImage);
pyrDown(srcImage,dstImage,Size(srcImage.cols/,srcImage.rows/));// 缩小2倍
imshow("金字塔缩小2倍图",dstImage);
阈值化
阈值是最简单的图像分割方法,是基于图像中物体与背景之间的灰度差异,且此分割属于像素级的分割。阈值操作分为固定阈值操作threshold和自适应阈值操作adaptiveThreshold。Ps:threshold函数输入图像可以是8位也可以是32位,即可以是灰度图也可以为彩色图,但adaptiveThreshold输入图像必须是8位,即必须是灰度图。
Mat imgGray;
cvtColor(srcImage,dstImage,CV_BGR2GRAY);
imshow("灰度图.jpg",dstImage);
imgGray = dstImage;
//阈值化操作
threshold(srcImage,dstImage,,,);//表示阈值的具体值,255表示阈值类型的最大值,3表示其阈值方式
imshow("固定阈值化图像",dstImage);
adaptiveThreshold(imgGray,dstImage,,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,,);//3表示计算阈值大小的一个像素的领域尺寸,取值为3,5,7等。1表示减去平均或加权平均值后的常数值,通常为正数,少数情况下也可以为0或负数。
imshow("自适应阈值化图像",dstImage);
霍夫变换 Hough
霍夫变换是图像处理中的一种特征提取技术,霍夫变换运用两个坐标空间之间的变换将在一个空间中具有相同形状的曲线或者直线映射到另一个坐标空间的一个点上形成峰值,从而把检测任意形状的问题转化为统计峰值问题。
霍夫线变换原理采用直线在极坐标表示情况下,由极径和极角(r,theta)表示。
OpenCV3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换的更多相关文章
- OpenCV3编程入门笔记(6)自我验证各函数程序代码
// asw.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/opencv.hpp> usi ...
- OpenCV探索之路(四):膨胀、腐蚀、开闭运算
腐蚀和膨胀是最基本的形态学运算. 腐蚀和膨胀是针对白色部分(高亮部分)而言的. 膨胀就是对图像高亮部分进行"领域扩张",效果图拥有比原图更大的高亮区域:腐蚀是原图中的高亮区域被蚕食 ...
- OpenCV3编程入门笔记(1)图像载入、显示、保存、变换灰度图
图像载入.显示.保存函数: 1 图像载入函数:imread() Mat imread(const string& filename, int flags=1); const ...
- OpenCV3编程入门笔记(5)重要章节小节及核心函数
- OpenCV3编程入门笔记(3)线性滤波、非线性滤波、图像深度、通道
15 遍历图像中的像素,是先for行数后for列数的,也就是一列一列的遍历,matlab中是从1开始计数,opnecv中采用c语言的从0开始计数. 矩阵归一化:normalize()函数,参数 ...
- OpenCV3编程入门笔记(2)计时函数、感兴趣区域RIO、分离/混合通道
11 绘制直线的line函数 DrawLine(Mat img, Pont start, Point end); 绘制椭圆的ellipse函数 DrawEllipse(Mat img, dou ...
- OpenCV3编程入门笔记(一)
---恢复内容开始--- 图像处理技术一般包括图像压缩,增强和复原,匹配.描述和识别3个部分.图像处理和计算机视觉的区别在于:图像处理侧重于“处理”图像——如增强.还原.去噪.分割等:而计算机视觉重点 ...
- OpenCV笔记(2)(高斯平滑、腐蚀和膨胀、开闭运算、礼帽和黑帽、Sobel及其他算子)
一.高斯平滑(模糊) def gaussian_blur(image): # 设置ksize来确定模糊效果 img = cv.GaussianBlur(image, (5, 5), 0) cv.ims ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
随机推荐
- 静态方法和类成员方法(Python)
静态方法和成员方法分别在创建时分别被装入Staticmethod 类型和 Classmethod类型的对象中.静态方法的定义没有 self参数,且能够被类本身直接调用,类方法在定义时需要名为 cls的 ...
- 2016CCPC东北地区大学生程序设计竞赛 1008 HDU5929
链接http://acm.hdu.edu.cn/showproblem.php?pid=5929 题意:给你一种数据结构以及操作,和一种位运算,最后询问:从'栈'顶到低的运算顺序结果是多少 解法:根据 ...
- js动画 无缝轮播 进度条 文字页面展示 div弹窗遮罩效果
1.无缝轮播 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.a ...
- 基于Node的PetShop,RESTful API以及认证
前篇 - 基本认证,用户名密码 后篇 - OAuth2 认证 由于宠物店的业务发展需要,我们需要一种更加便捷的方式来管理日益增多的宠物和客户.最好的方法就是开发一个APP,我可以用这个APP来添加.更 ...
- Json 入门例子【2】
<script> var json1 = { "id": 1, "tagName": "apple" }; $("#f ...
- #define用法集锦
Definition: The #define Directive You can use the #define directive to give a meaningful name to a c ...
- cvs版本控制器
CVS 版本控制器 首先我们要来明确 :为什么要学习CVS •项目开发靠的是一个团队的能力,很少有大中型项目是由个人完成的.对于团队开发来讲---能控制每个人的分工和权限, 可以让多个人同时编辑同 ...
- [POJ1222]EXTENDED LIGHTS OUT(高斯消元,异或方程组)
题目链接:http://poj.org/problem?id=1222 题意:开关是四连通的,每按一个就会翻转自己以及附近的四个格(假如有).问需要翻转几个,使他们都变成关. 把每一个灯看作一个未知量 ...
- 02_Spring控制反转案例快速入门
Spring控制反转案例快速入门 1.下载Spring最新开发包 http://www.springsource.org/download/community 下载spring3.2 的开发包 目录结 ...
- Timeout expired超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
此文章非原创,仅为分享.学习!!! 参考数据库链接串: <add key="data" value="server=192.168.1.123; port=3306 ...