python實現開閉操作


 

目錄:

 開閉操作的作用

(一)開操作

(二)閉操作 

(三)開操作完成其他任務 

(1)提取水平垂直線

(2)消除干擾線

(3)提取滿足要求的形狀

 

 

 開閉操作的作用:

 

(一)開操作(特點作用:消除噪點-----去除小的干擾塊,而不影響原來的圖像。先腐蝕后膨脹)

 1 import cv2 as cv
 2 import numpy as np
 3 
 4 def camp(val1,val2):
 5     pv = val1 + val2
 6     if pv > 255:
 7         return 255
 8     if pv < 0:
 9         return 0
10     return pv
11 
12 def open_demo(image):
13     gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
14     for i in range(1000):  #為灰度圖像加一些噪點
15         h = np.random.random_integers(0,gray.shape[0]-1)
16         w = np.random.random_integers(0, gray.shape[1]-1)
17         val = np.random.random_integers(0, 255)
18         gray[h,w] = camp(gray[h,w],val)
19 
20     ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)  #生成二值化圖像
21     cv.imshow("binary",binary)
22     kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))#結構元素,矩形大小3*3
23     binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)  #支持形態學的函數,此參數為開操作,先腐蝕后膨脹,會消除一些為1的白色噪點
24     cv.imshow("open_demo",binary)
25 
26 
27 src = cv.imread("./o.png")  #讀取圖片
28 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #創建GUI窗口,形式為自適應
29 cv.imshow("input image",src)    #通過名字將圖像和窗口聯系
30 
31 open_demo(src)
32 
33 cv.waitKey(0)   #等待用戶操作,里面等待參數是毫秒,我們填寫0,代表是永遠,等待用戶操作
34 cv.destroyAllWindows()  #銷毀所有窗口

 

(二)閉操作(特點:可以填充閉合區域。先膨脹后腐蝕)

 1 def close_demo(image):
 2     gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
 3     ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
 4     cv.imshow("binary",binary)
 5     kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
 6     binary = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
 7     cv.imshow("close_demo",binary)
 8 
 9 
10 src = cv.imread("./o.png")  #讀取圖片
11 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)    #創建GUI窗口,形式為自適應
12 cv.imshow("input image",src)    #通過名字將圖像和窗口聯系

(三)開操作完成其他任務

(1)提取水平垂直線

1 def open_demo(image):
2     gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
3     ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
4     cv.imshow("binary",binary)
5     kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15))  #修改內核為(15,1)可以提起橫線,水平-豎直。
6     binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
7     cv.imshow("open_demo",binary)

 原理:

 

  1 kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15)) 

 (2)消除干擾線

1 def open_demo(image):
2     gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
3     ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
4     cv.imshow("binary",binary)
5     kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))  #因為干擾線很細,小於我們想要的字母,先腐蝕后膨脹對字母無影響,但是對於細線在腐蝕的時候就處理掉了
6     binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
7     cv.imshow("open_demo",binary)

 (3)提取滿足要求的形狀

getStructuringElement我們設置的內核形狀為矩形,是可以設置其他形狀

矩形:MORPH_RECT;
交叉形:MORPH_CORSS;
橢圓形:MORPH_ELLIPSE;
1 def open_demo(image):
2     gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
3     ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
4     cv.imshow("binary",binary)
5     kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
6     binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
7     cv.imshow("open_demo",binary)

 參考:

https://www.cnblogs.com/ssyfj/p/9277688.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM