形態學操作——腐蝕與膨脹

預備知識

結構元(SE)

1、結構元的中心一般來說是放在其重心位置處,但原則上原點的選擇是依賴于你要解決的問題的。
2、對圖像操作時,我們要求結構元是矩形陣列。(在結構元的基礎上添加較少的背景元素實現)
3、當結構元的中心位于原圖像的邊界時,要對原圖像進行填充操作

2注意點中的填充陣列:
填充陣列
但是其實這樣填充下來,只要給背景元素的權值賦0就和原來的一樣了。
就像這樣
這個陣列顯然和下面的陣列不是一個類型
在這里插入圖片描述
3注意點中的填充原圖像
填充

原理

腐蝕

公式
該表達式表示:B對A的腐蝕使用一個z平移的B包含在A中的所有點z的集合。
效果:
效果
也就是B的中心在A中遍歷之后,結構元素中沒有背景元素(即全是前景元素)的B中心的點的集合。

膨脹

原理
效果
膨脹是腐蝕的對偶操作。相當于將B的中心沿著所有A的點遍歷一遍,得到的B的所有元素的集合。

調用opencv庫函數

#include <opencv2/opencv.hpp>
#include <iostream>
#include "windows.h"
#include <stdio.h>using namespace cv;
using namespace std;
int main()
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);		//字體為綠色Mat srcImage = imread("D:\\opencv_picture_test\\形態學操作\\黑白.jpg");//判斷圖像是否加載成功if (srcImage.empty()){cout << "圖像加載失敗!" << endl;return -1;}elsecout << "圖像加載成功!" << endl << endl;namedWindow("原圖像", WINDOW_NORMAL);     //定義窗口顯示屬性imshow("原圖像", srcImage);//進行腐蝕操作Mat element_erode = getStructuringElement(MORPH_RECT,Size(15,15));	//返回的是內核矩陣Mat dstImage;erode(srcImage, dstImage, element_erode);					//腐蝕操作//顯示效果圖imshow("【腐蝕效果圖】", dstImage);//進行膨脹操作//獲取自定義核Mat element_dilate = getStructuringElement(MORPH_RECT, Size(15, 15));Mat out;//進行膨脹操作dilate(srcImage,out, element_dilate);imshow("【膨脹效果圖】", out);waitKey(0);return 0;
}

效果

圖片

作用

腐蝕的作用

消除A中比結構元B小的部件。去除黏連像素以及噪聲。
look
去除黏連像素

膨脹的作用

橋接裂縫,恢復連通性
作用:如圖,由于無法實現理想的二值化,使得原本連通的像素集合被
分成不同的連通域,從而影響目標物的提取。可通過膨脹運算使其恢復
連通性。
look
這種方法比低通濾波有一個直接優點:形態學橋接可以直接得到一個二值化的圖,
然而低通濾波則需要經過這樣過程:二值圖=>灰度圖=>二值圖。

另外需要了解的知識:

性質
look

之后的擊中擊不中變換中將會用到這樣的知識。

上面是以二值圖為例的,下面我們以灰度圖作為例子。1
效果:使整個圖像變暗且去除了局部較亮的像素
效果
效果:使整個圖像變亮且去除了局部較暗的像素

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/378733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/378733.shtml
英文地址,請注明出處:http://en.pswp.cn/news/378733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java集合轉換_java各種集合的轉換

內容&#xff1a;1、List轉Array 2、Array轉List3、String轉int[],String[](對單個字符) 4、數組、List、Set、Map相互轉換5、一行輸入多個元素方法常用集合&#xff1a;Map、Set、List、Array、String1、List轉Array&#xff…

10-禮帽與黑帽操作

cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) 第一個參數&#xff1a;圖像對象名稱 第二個參數&#xff1a;運算類型TOPHAT為禮帽運算 第三個參數&#xff1a;卷積核的大小 禮帽運算&#xff1a;原始的輸入-開運算&#xff08;先腐蝕再膨脹&#xff09; 原始帶刺兒&#xff…

2011 cnblogs開通--給力吧

在信息傳遞如此迅速的時代&#xff0c;自己慢慢的老去&#xff0c;是否要想寫些什么&#xff0c;跟大家一起分享學習、工作、生活的酸甜苦辣&#xff0c;提高自己的各方面的能力;往后將慢慢記錄自己的程序人生吧&#xff0c;就什么多了&#xff0c;作為自己cnblogs第一篇吧^_^轉…

Android----獲取activity上所有的控件

01/**02 * note 獲取該activity所有view03 * author liuh04 * */05 public List<View> getAllChildViews() {06 View view this.getWindow().getDecorView();07 return getAllChildViews(view);08 }09 10 private List<View> …

微信小程序 查找兄弟節點_使用C ++程序在鏈接列表中查找節點

微信小程序 查找兄弟節點Given a linked list and an integer N, you need to find and return index where N is present in the Linked List. Return -1 if n is not present in the Linked List. 給定一個鏈表和一個整數N&#xff0c;您需要查找并返回索引&#xff0c;其中鏈…

形態學操作——開閉運算、頂帽底(黑)帽變換

膨脹和腐蝕運算的問題&#xff1a; 邊緣形狀發生了變化&#xff0c;膨脹發生了擴張&#xff0c;腐蝕發生了收縮 目標物體變形&#xff0c;對識別時的特征提取會造成影響 解決方法&#xff1a; 開操作: B對A的開操作就是先B對A腐蝕&#xff0c;緊接著用B對結果進行膨脹 先腐…

java 基礎實戰_Java基礎實戰(三)

是否是否是否是否獲取字符串字符數組大寫?小寫?數字?非字母與數字大寫字母小寫字母數字i結束ii1第一步 拆分字符串為字符數組&#xff1a;static void count(String str) {// 將字符串拆分為字符數組char[] charArray str.toCharArray();}第二步 定義相關變量記錄結果&…

11-圖像梯度-Sobel算子

圖像梯度是指圖像某像素在x和y兩個方向上的變化率&#xff08;與相鄰像素比較&#xff09;&#xff0c;是一個二維向量&#xff0c;由2個分量組成&#xff0c;X軸的變化、Y軸的變化 。 其中X軸的變化是指當前像素右側&#xff08;X加1&#xff09;的像素值減去當前像素左側&…

給IE有效指定編碼

<title>下一站</title> <meta http-equiv"Content-Type" content"text/html; charsetutf-8" /> IE每次打開&#xff0c;均是一片空白&#xff0c;查看右鍵&#xff0d;編碼&#xff0c;顯示是GB2312。要手功改為UTF-8后才能正常顯示頁面…

形態學操作——擊中擊不中變換

操作目的 HitMiss變換是形態檢測的一個工具&#xff0c;通過定義形狀模板可以在圖像中獲取同一形狀物體的位置坐標。 算法講解 1、用擊中結構去腐蝕原始圖像得到擊中結果X&#xff08;這個過程可以理解為在原始圖像中尋找和擊中結構完全匹配的模塊&#xff0c;匹配上了之后&…

stack.pop()方法_C.示例中的Stack.Pop()方法

stack.pop()方法C&#xff03;Stack.Pop()方法 (C# Stack.Pop() method) Stack.Pop() method is used to remove an object from the top of the stack. The method removes and returns the object from the top. Stack.Pop()方法用于從堆棧頂部刪除對象。 該方法從頂部刪除并…

java list的作用_集合框架(List集合的特有功能概述和測試)

package cn.itcast_03;import java.util.ArrayList;import java.util.List;/** List集合的特有功能&#xff1a;* A:添加功能* void add(int index,Object element):在指定位置添加元素* B:獲取功能* Object get(int index):獲取指定位置的元素* C:列表迭代器* ListIterator li…

12-圖像梯度-Scharr算子和laplacian算子

Scharr算子 cv2.Scharr(img,cv2.CV_64F,1,0) 第一個參數&#xff1a;當前的圖像對象名稱 第二個參數&#xff1a;當前圖像的深度&#xff0c;通常情況下指定為-1&#xff0c;表示輸出和輸入的深度是一樣的&#xff1b;cv2.CV_64F可以存6字節的大小&#xff0c;為了方便后面的取…

新的一年新希望,百忙中繼續學習

公司來了一批新同事&#xff0c;我又忙于購買設備&#xff0c;布置辦公桌了。 小林建議我找一份更合適的工作&#xff0c;目前的我其實是在混日子&#xff0c;因為我并不擅長溝通與銷售。 暫時還是保持這樣吧&#xff0c;我還需要一定時間來積蓄力量。 轉載于:https://www.cnbl…

Oracle Internal Event:10200 Consistent Read診斷事件

10200(consistent read buffer status)內部診斷事件可以用于探測一致性讀CR(consistent read)塊的訪問情況&#xff0c;雖然cr讀的統計信息可以從v$sysstat或AWR/statspack中獲取&#xff0c;但是10200 event還是我們研究Consistent Read一致性讀的有力工具。該事件可以通過在會…

多線程循環輸出abcc++_C ++循環| 查找輸出程序| 套裝4

多線程循環輸出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int A 5;int fun(){return A--;}int main(){int A 5;while (fun()) {cout << A ::A << " ";}return 0;}Output: 輸出&#xff1a; 9 8 7 6 5Explana…

Opencv——圖像金字塔與圖像尺寸縮放

主要講解 1、resize()函數調用 函數定義&#xff1a; 調用方式&#xff1a; resize(srcImage, dstImage, Size(64, 128)); //對圖片進行修改 resize(srcImage, dstImage, Size(), 0.5, 0.5);第6個參數的含義&#xff1a; INTER_NEAREST:最鄰近插值 (放大好用) INTER_ARE…

java nature_Java中BufferedReader和scanner的對比 - nature

原地址&#xff1a;http://blog.sina.com.cn/s/blog_5fd837410100rtwk.html Scanner 和BufferedReader同樣能實現將鍵盤輸入的數據送入程序&#xff0c; import java.io.*; import java.util.Scanner; public class C { public static void main(String []args) throws IOExcep…

13-Canny邊緣檢測

Canny邊緣檢測主要思路步驟如下&#xff1a; 1&#xff0c;使用高斯濾波器&#xff0c;以平滑圖像&#xff0c;濾除噪聲 2&#xff0c;計算圖像中每個像素點的梯度強度和方向 3&#xff0c;應用非極大值抑制&#xff0c;以消除邊緣檢測帶來的雜散響應 4&#xff0c;應用雙閾值檢…

c# uri.host_C#| Uri.IsHexEncoding()方法與示例

c# uri.hostUri.IsHexEncoding()方法 (Uri.IsHexEncoding() Method) Uri.IsHexEncoding() method is a static method or Uri class. Which is used to return that given string is hex-encoded or not? If the given string is hex coded then it returns true otherwise it…