Python: 如何使用 openCV 修复图像中的杂乱区域?
Python: How can I fix messy areas in my image with openCV?
我有一个使用 OpenCV 在图像中查找轮廓的代码。但是当我的代码基于凌乱的图像时,它不起作用。
我的头像:
我的图片是一张扫描纸,有很多杂乱的地方。所以我应用了高斯模糊、OTSU-Thresholding 和 Morph close 来修复。
我的代码:
# Apply GaussianBlur + OTSU-Thresholding
grayscale_image = cv.cvtColor(source_image, cv.COLOR_BGR2GRAY)
grayscale_image = cv.GaussianBlur(grayscale_image, (5, 5), 0)
ret, grayscale_image = cv.threshold(grayscale_image, 200, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
cv.imshow("grayscale_image", grayscale_image)
# Apply Morph Close
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
morph_closed_image = cv.morphologyEx(grayscale_image, cv.MORPH_CLOSE, kernel)
cv.imshow("morph_closed_image", morph_closed_image)
然而,这些轮廓是由我的代码奇怪地创建的。图像的杂乱区域被识别为轮廓。
我的轮廓图:
而且,这是我的等高线代码:
contours, hierarchy = cv.findContours(morph_closed_image, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
contour_sizes = [(cv.contourArea(contour), contour) for contour in contours]
biggest_contour = max(contour_sizes, key=lambda x: x[0])[1]
contour_image = source_image.copy()
cv.drawContours(contour_image, [biggest_contour], 0, (0, 0, 255), 2)
cv.imshow('contour_image', contour_image)
因此,我想修复图像中的噪点和杂乱。如果我修复图像中的噪点和杂乱区域,应用的轮廓效果很好。
如何使用 openCV 修复图像中的杂乱区域?
我的目标:
请多多指教
M Z说得有道理
你只需要腐蚀然后膨胀它。它实际上可能具有相同的内核和迭代。
这样做的主要目的是:
- 随着侵蚀,guaraty那个小白形状被杀了。
- 通过膨胀,恢复感兴趣区域被侵蚀的白色形状(大形状)。
所以,你应该腐蚀直到所有的小形状都被杀死,然后尝试 return 大形状的原始大小并进行膨胀。
我有一个使用 OpenCV 在图像中查找轮廓的代码。但是当我的代码基于凌乱的图像时,它不起作用。
我的头像:
我的图片是一张扫描纸,有很多杂乱的地方。所以我应用了高斯模糊、OTSU-Thresholding 和 Morph close 来修复。
我的代码:
# Apply GaussianBlur + OTSU-Thresholding
grayscale_image = cv.cvtColor(source_image, cv.COLOR_BGR2GRAY)
grayscale_image = cv.GaussianBlur(grayscale_image, (5, 5), 0)
ret, grayscale_image = cv.threshold(grayscale_image, 200, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
cv.imshow("grayscale_image", grayscale_image)
# Apply Morph Close
kernel = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
morph_closed_image = cv.morphologyEx(grayscale_image, cv.MORPH_CLOSE, kernel)
cv.imshow("morph_closed_image", morph_closed_image)
然而,这些轮廓是由我的代码奇怪地创建的。图像的杂乱区域被识别为轮廓。
我的轮廓图:
而且,这是我的等高线代码:
contours, hierarchy = cv.findContours(morph_closed_image, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
contour_sizes = [(cv.contourArea(contour), contour) for contour in contours]
biggest_contour = max(contour_sizes, key=lambda x: x[0])[1]
contour_image = source_image.copy()
cv.drawContours(contour_image, [biggest_contour], 0, (0, 0, 255), 2)
cv.imshow('contour_image', contour_image)
因此,我想修复图像中的噪点和杂乱。如果我修复图像中的噪点和杂乱区域,应用的轮廓效果很好。
如何使用 openCV 修复图像中的杂乱区域?
我的目标:
请多多指教
M Z说得有道理
你只需要腐蚀然后膨胀它。它实际上可能具有相同的内核和迭代。
这样做的主要目的是:
- 随着侵蚀,guaraty那个小白形状被杀了。
- 通过膨胀,恢复感兴趣区域被侵蚀的白色形状(大形状)。
所以,你应该腐蚀直到所有的小形状都被杀死,然后尝试 return 大形状的原始大小并进行膨胀。