OpenCV---开闭操作
生活随笔
收集整理的這篇文章主要介紹了
OpenCV---开闭操作
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一:開操作(先腐蝕后膨脹)
特點:消除噪點,去除小的干擾塊,而不影響原來的圖像
import cv2 as cv
import numpy as np
def camp(val1,val2):
pv = val1 + val2
if pv > 255:
return 255
if pv < 0:
return 0
return pv
def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
for i in range(1000): #為灰度圖像加一些噪點
h = np.random.random_integers(0,gray.shape[0]-1)
w = np.random.random_integers(0, gray.shape[1]-1)
val = np.random.random_integers(0, 255)
gray[h,w] = camp(gray[h,w],val)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) #生成二值化圖像
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3))
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel) #開操作,先腐蝕后膨脹,會消除一些為1的白色噪點
cv.imshow("open_demo",binary)
src = cv.imread("./o.png") #讀取圖片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #創(chuàng)建GUI窗口,形式為自適應
cv.imshow("input image",src) #通過名字將圖像和窗口聯(lián)系
open_demo(src)
cv.waitKey(0) #等待用戶操作,里面等待參數(shù)是毫秒,我們填寫0,代表是永遠,等待用戶操作
cv.destroyAllWindows() #銷毀所有窗口
二:閉操作(先膨脹后腐蝕)
特點:可以填充閉合區(qū)域
def close_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,15))
binary = cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel)
cv.imshow("close_demo",binary)
src = cv.imread("./o.png") #讀取圖片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #創(chuàng)建GUI窗口,形式為自適應
cv.imshow("input image",src) #通過名字將圖像和窗口聯(lián)系
三:利用開操作完成的任務
(一)提取水平垂直線
def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(1,15)) #修改內(nèi)核為(15,1)可以提起橫線
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
cv.imshow("open_demo",binary)
原理:
kernel = cv.getStructuringElement(cv.MORPH_RECT,(15,1))
(二)消除干擾線
def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY_INV|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,3)) #因為干擾線很細,小于我們想要的字母,先腐蝕后膨脹對字母無影響,但是對于細線在腐蝕的時候就處理掉了
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
cv.imshow("open_demo",binary)
(三)提取滿足要求的形狀
getStructuringElement我們設(shè)置的內(nèi)核形狀為矩形,是可以設(shè)置其他形狀
矩形:MORPH_RECT; 交叉形:MORPH_CORSS; 橢圓形:MORPH_ELLIPSE;
參考:OpenCV---膨脹與腐蝕
def open_demo(image):
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
cv.imshow("binary",binary)
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE,(5,5))
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
cv.imshow("open_demo",binary)
總結(jié)
以上是生活随笔為你收集整理的OpenCV---开闭操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显示用户IP来源的代码
- 下一篇: 让div撑满整个屏幕的方法(css)