OpenCV 腐蚀选择什么内核?
OpenCV erode what kernel to choose?
我想破坏我的形象:
为了接近这个(我的目标):
我用的是OpenCV的这个基础内核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
image_1 = cv2.erode(gray_overlay, kernel, iterations=1)
我知道有自定义内核,我试过不同重量、不同大小的内核,但我得不到满意的结果(方块分离不损失太多白色表面)
有人可以就内核向我提供建议吗?
谢谢! :)
如果你不关心盒子的具体形状,只关心它们之间的间隙,你应该尝试形态学开运算而不是只应用腐蚀。
试试这个:
import cv2 as cv
image = cv.imread("image.png")
kernel = np.ones((9, 9), np.uint8)
eroded_image = cv.erode(image, kernel, iterations = 2)
dilated_image = cv.dilate(eroded_image, kernel, iterations = 2)
您可以调整内核的大小和迭代次数来操纵最终输出。
您还可以使用:
cv.morphologyEx(image, cv.MORPH_OPEN, kernel)
你可以使用宽而短的内核(水平线的形状)。
通过反复试验,我发现内核大小 21x2 给出了最好的结果(如果不关心内核对输入的过度拟合)。
为了保持白色表面,需要先腐蚀再膨胀。
腐蚀比膨胀的形态学操作被命名为“闭合”。
这是一个代码示例:
import cv2
gray_overlay = cv2.imread("image.png", cv2.IMREAD_GRAYSCALE) # Read image as grayscale.
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 2))
# Erode then dilate
image_1 = cv2.erode(gray_overlay, kernel)
image_2 = cv2.dilate(image_1, kernel)
# Erode then dilate is called "open"
image_3 = cv2.morphologyEx(gray_overlay, cv2.MORPH_OPEN, kernel)
cv2.imshow('gray_overlay', gray_overlay)
cv2.imshow('image_1', image_1)
cv2.imshow('image_2', image_2)
cv2.imshow('image_3', image_3)
cv2.waitKey()
cv2.destroyAllWindows()
结果:
image_1
(腐蚀后):
image_2
(腐蚀和膨胀后):
image_3
(关闭后):
我想破坏我的形象:
为了接近这个(我的目标):
我用的是OpenCV的这个基础内核
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
image_1 = cv2.erode(gray_overlay, kernel, iterations=1)
我知道有自定义内核,我试过不同重量、不同大小的内核,但我得不到满意的结果(方块分离不损失太多白色表面)
有人可以就内核向我提供建议吗?
谢谢! :)
如果你不关心盒子的具体形状,只关心它们之间的间隙,你应该尝试形态学开运算而不是只应用腐蚀。
试试这个:
import cv2 as cv
image = cv.imread("image.png")
kernel = np.ones((9, 9), np.uint8)
eroded_image = cv.erode(image, kernel, iterations = 2)
dilated_image = cv.dilate(eroded_image, kernel, iterations = 2)
您可以调整内核的大小和迭代次数来操纵最终输出。
您还可以使用:
cv.morphologyEx(image, cv.MORPH_OPEN, kernel)
你可以使用宽而短的内核(水平线的形状)。
通过反复试验,我发现内核大小 21x2 给出了最好的结果(如果不关心内核对输入的过度拟合)。
为了保持白色表面,需要先腐蚀再膨胀。
腐蚀比膨胀的形态学操作被命名为“闭合”。
这是一个代码示例:
import cv2
gray_overlay = cv2.imread("image.png", cv2.IMREAD_GRAYSCALE) # Read image as grayscale.
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (21, 2))
# Erode then dilate
image_1 = cv2.erode(gray_overlay, kernel)
image_2 = cv2.dilate(image_1, kernel)
# Erode then dilate is called "open"
image_3 = cv2.morphologyEx(gray_overlay, cv2.MORPH_OPEN, kernel)
cv2.imshow('gray_overlay', gray_overlay)
cv2.imshow('image_1', image_1)
cv2.imshow('image_2', image_2)
cv2.imshow('image_3', image_3)
cv2.waitKey()
cv2.destroyAllWindows()
结果:
image_1
(腐蚀后):
image_2
(腐蚀和膨胀后):
image_3
(关闭后):