opencv學習(二十四):開閉操作
阿新 • • 發佈:2018-12-08
程式碼如下:
#匯入cv模組 import cv2 as cv import numpy as np #開操作,刪除小的干擾快 def open_demo(image): print(image.shape) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) # ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) cv.imshow("binary image", binary) # kernel=cv.getStructuringElement(cv.MORPH_RECT,(15,1))#提取水平線 # kernel = cv.getStructuringElement(cv.MORPH_RECT, (1, 15)) # 提取豎著的線 kernel = cv.getStructuringElement(cv.MORPH_RECT, (4, 4)) # 提取豎著的線 binary=cv.morphologyEx(binary,cv.MORPH_OPEN,kernel) cv.imshow("open-result",binary) #閉操作 def close_demo(image): print(image.shape) gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY) ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) cv.imshow("binary image", binary) kernel=cv.getStructuringElement(cv.MORPH_RECT,(15,15)) binary=cv.morphologyEx(binary,cv.MORPH_CLOSE,kernel) cv.imshow("close-result",binary) print("------------Python Opencv Tutorial!-------------") # 讀取影象,支援 bmp、jpg、png、tiff 等常用格式 #src = cv.imread("F:/Projects/images/bin2.png") # src = cv.imread("F:/Projects/images/bin1.png") src = cv.imread("F:/Projects/images/chars.png") #建立視窗並顯示影象 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) cv.imshow("input image",src) #顯示原圖 open_demo(src) close_demo(src) cv.waitKey(0) #釋放視窗 cv.destroyAllWindows()
執行效果:
參考連結:https://blog.csdn.net/water_93/article/details/50859193
形態學的其他操作:https://blog.csdn.net/qq_30490125/article/details/80490776
程式碼示例:
#匯入cv模組 import cv2 as cv import numpy as np #頂帽 黑帽 基於灰度影象的 def top_hat_demo(image): gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) kernel=cv.getStructuringElement(cv.MORPH_RECT,(15,15)) # dst=cv.morphologyEx(gray,cv.MORPH_TOPHAT,kernel)#頂帽 dst = cv.morphologyEx(gray, cv.MORPH_BLACKHAT, kernel) # 頂 cimage=np.array(gray.shape,np.uint8)#黑帽 cimage=100 dst=cv.add(dst,cimage) cv.imshow("tophat",dst) #頂帽 黑帽 基於二值影象的 def top_binary_demo(image): gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) kernel=cv.getStructuringElement(cv.MORPH_RECT,(15,15)) # dst = cv.morphologyEx(binary, cv.MORPH_TOPHAT, kernel) #頂帽 dst = cv.morphologyEx(binary, cv.MORPH_BLACKHAT, kernel) # 黑帽 cv.imshow("tophat",dst) #梯度 基於二值影象的 def gradient_demo(image): gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY) ret,binary=cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU) kernel=cv.getStructuringElement(cv.MORPH_RECT,(3,3)) # dst = cv.morphologyEx(binary, cv.MORPH_TOPHAT, kernel) #頂帽 dst = cv.morphologyEx(binary, cv.MORPH_GRADIENT, kernel) #梯度 cv.imshow("gradient_demo",dst) def gradient2_demo(image): kernel=cv.getStructuringElement(cv.MORPH_RECT,(3,3)) dm=cv.dilate(image,kernel) em=cv.dilate(image,kernel) dst1=cv.subtract(image,em)#inrernal gradient dst2 = cv.subtract(dm, image) #external gradient cv.imshow("internal",dst1) cv.imshow("external", dst2) print("------------Python Opencv Tutorial!-------------") # 讀取影象,支援 bmp、jpg、png、tiff 等常用格式 src = cv.imread("F:/Projects/images/bin2.png") #建立視窗並顯示影象 cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) cv.imshow("input image",src) #顯示原圖 # top_hat_demo(src) # top_binary_demo(src) #gradient_demo(src) gradient2_demo(src) cv.waitKey(0) #釋放視窗 cv.destroyAllWindows()