OpenCV Tutorial: 開運算、閉運算(morphologyEx、MORPH_OPEN、MORPH_CLOSE)
開運算、閉運算(morphologyEx、MORPH_OPEN、MORPH_CLOSE)
這邊介紹開運算和閉運算,這兩種都是侵蝕和膨脹複合而成,開運算是先侵蝕後膨脹,閉運算是先膨脹後侵蝕。
對於集合I和H,假設使用H對I進行開運算,代表H對I進行侵蝕後膨脹,記作:
開運算可以使物體輪廓變得光滑,還能使狹窄的連結斷開,以及消除外觀上的毛刺,但在物體大於結構元素的情況下,開運算與侵蝕並不相同,圖像的輪廓並沒有產生整體的收縮,物體位置也沒有發生任何變化,假如我們對一幅影像重複進行開運算,不會產生任何變化,這點和重複進行侵蝕會加強程度的現象不同。
有兩種方式進行開運算,一種是先呼叫erode()將影像進行侵蝕,接著將侵蝕後的圖,當作dilate()膨脹運算的原始圖,最後的輸出圖即為結果,另外一種方式是使用morphologyEx()函式,將其中某個參數輸入MORPH_OPEN。
OpenCV開運算
morphologyEx(const Mat &src, Mat &dst, int op, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
- src:輸入圖,可以多通道,深度可為CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
- dst:輸出圖,和輸入圖尺寸、型態相同。
- op:操作種類,決定要進行何種型態學操作,在開運算時輸入MORPH_OPEN。
- kernel:結構元素。
- anchor:原點位置,預設為結構元素的中央。
- iterations:執行次數,預設為1次。
對於集合I和H,假設使用H對I進行閉運算,代表H對I進行膨脹後侵蝕,記作:
閉運算也可以使物體輪廓變得光滑,和開運算不同,閉運算通常能彌補狹窄的間斷,假如我們對一幅影像重複進行閉運算,不會產生任何變化,這點和重複進行膨脹會加強程度的現象不同。
有兩種方式進行開運算,一種是先呼叫dilate()將影像進行膨脹,接著將膨脹後的圖,當作erode()侵蝕運算的原始圖,最後的輸出圖即為結果,另外一種方式是使用morphologyEx(),將其中某個參數輸入MORPH_CLOSE。
OpenCV閉運算
morphologyEx(const Mat &src, Mat &dst, int op, Mat kernel, Point anchor=Point(-1,-1), int iterations=1)
- src:輸入圖,可以多通道,深度可為CV_8U、CV_16U、CV_16S、CV_32F或CV_64F。
- dst:輸出圖,和輸入圖尺寸、型態相同。
- op:操作種類,決定要進行何種型態學操作,在閉運算時輸入MORPH_CLOSE。
- kernel:結構元素。
- anchor:原點位置,預設為結構元素的中央。
- iterations:執行次數,預設為1次。
以下程式碼示範morphologyEx()的使用,模板參數可輸入Mat(),此時會用3×3的矩形模板,也可以用getStructuringElement()來得到想要的大小和形狀的模板,我們可以看出二值化的圖形,在進行開運算或閉運算後,影像變化的樣子:
#include <cstdio>
#include <opencv2/opencv.hpp>
using namespace cv;int main(){Mat src = imread("lena.jpg",CV_LOAD_IMAGE_GRAYSCALE);Mat src2;threshold(src,src2,120,255,THRESH_BINARY);Mat dst1;Mat dst2;Mat dst3;morphologyEx(src2, dst1, MORPH_OPEN, Mat());morphologyEx(src2, dst2, MORPH_CLOSE, Mat());Mat erodeStruct = getStructuringElement(MORPH_RECT,Size(5,5));morphologyEx(src2, dst3, MORPH_OPEN, erodeStruct);imshow("origin", src2);imshow("open", dst1);imshow("close", dst2);imshow("open2", dst3);waitKey(0);return 0;
}
OpenCV Tutorial: 開運算、閉運算(morphologyEx、MORPH_OPEN、MORPH_CLOSE)相关推荐
- 開運算、閉運算(morphologyEx、MORPH_OPEN、MORPH_CLOSE)
這邊介紹開運算和閉運算,這兩種都是侵蝕和膨脹複合而成,開運算是先侵蝕後膨脹,閉運算是先膨脹後侵蝕. 對於集合I和H,假設使用H對I進行開運算,代表H對I進行侵蝕後膨脹,記作: 開運算可以使物體輪廓變得 ...
- 台式计算机l小时耗电,电脑一天的耗电量是多少?不算不知道 一算吓一跳!
原标题:电脑一天的耗电量是多少?不算不知道 一算吓一跳! 天的耗电量是多少? 买了电脑后很多人非常关系的一个问题就是电脑一天耗电量是多少?是的应该好好算一下这笔帐,不算不知道一算没准吓一跳.特别是台式 ...
- Cocos2d中使用颜色混合:加算,减算
Cocos2d中使用颜色混合:加算,减算 转自http://blog.sina.com.cn/s/blog_7a2ffd5c0100xtid.html CCSprite有一个ccBlendFunc类型 ...
- 大型网站首页执行时间0.3秒,性能算好还是算坏?
正在编写一个大型网站,本机调试时首页执行时间到了0.3秒(APP_DEBUG为true时),这样的性能算好还是算坏?网站日pv20万左右,日IP2万左右. 本机配置:CPU:AMD A8-7650k, ...
- 天然气阶梯是按年还是按月_天然气阶梯价是按年算还是月算
天然气阶梯价是按年算还是月算呢?作为天然气使用新手来说,可能对此并不是很了解.不过别急,下面就让我来为大家一一揭晓答案. 天然气阶梯价是按年算还是月算 按年算.阶梯气价从本年9月1日到隔年8月31日为 ...
- C#实现批量高斯投影正算、反算
批量计算有利于提高工作/学习效率,本文以EPSG提供<Coordinate Conversions and Transformations including Formulas> 的高斯投 ...
- 超级计算机应用于石油勘测等方面,算天算地 算人——国家超级计算天津中心主任刘光明解读超级计算机系统应用(二)...
--算地.超级计算机对地震的模拟,使得我们可以更好地对地震进行预测,而其在地球物理学中的应用,则具有巨大的经济效益. 以超级计算机为平台对石油勘探地震数据进行处理,为提高我国油气资源的保障能力.解决对 ...
- 【Matlab笔记】测绘工程专业正算、反算、度分秒转弧度函数
上传,作为网络笔记 正算 %%坐标正算函数,起点坐标x1,y1 function [x2,y2]=zhengsuan(x1,y1,A,L)x2=x1+L*cos(A)y2=y1+L*sin(A) en ...
- 算命先生有三不算:不算死人、不算同行、不算自己。
算命先生有三不算:不算死人.不算同行.不算自己.算命之说,根本只是为了让你知道,并非让你知而更改.故算卦者算命,向来说一半留一半,那一半能说的是人力无法更改的是为人意,那一半不能说的便是人力可改的,也 ...
最新文章
- 在Django项目中使用富文本编辑器
- 五 Django 1.5.4 User Authentication 用户认证
- Ethernet/IP 学习笔记三
- java-第七章-数组-循环输出
- 公有云:美酒or毒药?--【软件和信息服务】2014.12
- tp获取referer里的域名_thinkPHP的redirect跳转和referer使用的问题
- 公共语言运行库(CLR)和中间语言(IL)(一)
- while和do-while的区别
- 余弦距离和欧氏距离,知道原理和公式后真的很简单
- NOIp2013 车站分级 【拓扑排序】By cellur925
- 区块链 FISCO BCOS学习文章(2)-FISCO BCOS怎么搭建
- Android测试总结
- windows系统下压力测试工具(cpu使用率,内存使用率,磁盘使用率,磁盘空间)
- GDPR 和个人信息保护的小知识
- npm install 提示 path .../node_modules/node-sass command failed
- Android 插件仓库
- WPF实现纵向显示TabControl标题及标题字体样式
- SS00027.algorithm——|ArithmeticMachine.v27|——|Machine:项目实战.v04|竞争分析|
- 那些很棒的 blog and site 优秀的博客和网站推荐
- UrlRewritingNet 完美实现 ASP.NET 2.0 中的URL重写(映射)