Python OpenCV 形态学操作(腐蚀膨胀,开运算和闭运算)
过滤器生成
腐蚀膨胀开、闭运算
形态学梯度
顶帽黑帽
过滤器生成
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()