过滤器生成
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) # 椭圆结构 kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3)) # 十字结构 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)) # 矩形结构
腐蚀膨胀开、闭运算
# -*-encoding:utf-8-*- import pytesseract from PIL import Image from PIL import ImageFilter from PIL import ImageFont from PIL import ImageDraw import numpy as np from PIL import Image import cv2 def main(): # img = cv2.imread("test001.jpg") #读取图片 # cv2.imshow("1",img) #显示图片 # cv2.waitKey(10000)# 延时10s # image = Image.open("test002.png") # img = image.convert('1') # 转化为灰度图 # img.show() img = cv2.imread("test002.png", 0) kernel = np.ones((3, 3), np.uint8) # 全为1的过滤数组 print(kernel) # 腐蚀(去白小点) img2 = cv2.erode(img, kernel) # 腐蚀 cv2.imshow('canny', img2) cv2.waitKey(2000) # cv2.waitKey() # 膨胀(去黑小点) img3 = cv2.dilate(img, kernel) # 膨胀 cv2.imshow('canny', img3) cv2.waitKey(2000) # cv2.waitKey() # 先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体,这样容易记住),其作用是:分离物体,消除小区域。 opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) # 开运算 cv2.imshow('canny', opening) cv2.waitKey(2000) # 闭运算则相反:先膨胀后腐蚀(先膨胀会使白色的部分扩张,以至于消除/"闭合"物体里面的小黑洞,所以叫闭运算) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) # 闭运算 cv2.imshow('canny', closing) cv2.waitKey(2000) if __name__ == '__main__': main()
形态学梯度
# -*-encoding:utf-8-*- import pytesseract from PIL import Image from PIL import ImageFilter from PIL import ImageFont from PIL import ImageDraw import numpy as np from PIL import Image import cv2 def main(): # img = cv2.imread("test001.jpg") #读取图片 # cv2.imshow("1",img) #显示图片 # cv2.waitKey(10000)# 延时10s # image = Image.open("test002.png") # img = image.convert('1') # 转化为灰度图 # img.show() img = cv2.imread("test002.png", 0) kernel = np.ones((3, 3), np.uint8) # 全为1的过滤数组 print(kernel) # 形态学梯度:膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮廓: gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) # 形态学梯度 cv2.imshow('canny', gradient) cv2.waitKey(2000) if __name__ == '__main__': main()
顶帽黑帽
# -*-encoding:utf-8-*- import pytesseract from PIL import Image from PIL import ImageFilter from PIL import ImageFont from PIL import ImageDraw import numpy as np from PIL import Image import cv2 def main(): # img = cv2.imread("test001.jpg") #读取图片 # cv2.imshow("1",img) #显示图片 # cv2.waitKey(10000)# 延时10s # image = Image.open("test002.png") # img = image.convert('1') # 转化为灰度图 # img.show() img = cv2.imread("test002.png", 0) kernel = np.ones((3, 3), np.uint8) # 全为1的过滤数组 print(kernel) # 顶帽:原图减去开运算后的图 tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) cv2.imshow('canny', tophat) cv2.waitKey(2000) # 黑帽:闭运算后的图减去原图 blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) cv2.imshow('canny', blackhat) cv2.waitKey(2000) if __name__ == '__main__': main()