import cv2 as cv
import numpy as np
src = cv.imread("morph02.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
# 高斯模糊去噪声
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
# 顶帽操作
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1))
binary = cv.morphologyEx(binary, cv.MORPH_TOPHAT, se)
cv.imshow("binary", binary)
cv.imwrite("binary3.png", binary)
cv.waitKey(0)
cv.destroyAllWindows()
读取图像:
src = cv.imread("morph02.png")
这行代码使用cv.imread()函数读取名为"morph02.png"的图像文件,并将其存储在变量src中。这个图像将作为后续处理的源图像。
创建显示窗口:
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
这两行代码首先创建一个名为"input"的窗口,并通过cv.WINDOW_AUTOSIZE参数设置窗口大小自适应图像大小。然后使用cv.imshow()函数在"input"窗口中显示原始图像src。
高斯模糊去噪声:
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
首先,使用cv.cvtColor()函数将原始图像从BGR颜色空间转换为灰度图像,存储在变量gray中。接着,使用cv.threshold()函数对灰度图像进行阈值处理,创建一个二值图像binary。这里使用Otsu的方法自动计算阈值,将图像转换为黑白两色,以便更好地进行后续形态学操作。
顶帽操作:
se = cv.getStructuringElement(cv.MORPH_RECT, (3, 3), (-1, -1))
binary = cv.morphologyEx(binary, cv.MORPH_TOPHAT, se)
顶帽操作是一种形态学操作,用于提取比结构元素小的亮区域。首先,使用cv.getStructuringElement()函数创建一个3x3大小的矩形结构元素se。然后,使用cv.morphologyEx()函数对二值图像binary应用顶帽操作,结果存储回binary变量中。
显示处理后的图像:
cv.imshow("binary", binary)
使用cv.imshow()函数在新窗口"binary"中显示经过顶帽操作处理后的二值图像。
保存处理后的图像:
cv.imwrite("binary3.png", binary)
使用cv.imwrite()函数将处理后的二值图像保存为"binary3.png"文件。
等待按键事件并关闭窗口:
cv.waitKey(0)
cv.destroyAllWindows()
cv.waitKey(0)函数等待用户按下任意键,cv.destroyAllWindows()函数关闭所有OpenCV创建的窗口。这样,程序会保持打开状态,直到用户按下键盘上的任意键,然后所有窗口将关闭,程序结束。