Python:如何使用openCV修复图像中的混乱区域?

2024-09-22 20:23:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用OpenCV在图像中查找轮廓的代码。但是当我的代码基于一个凌乱的图像时,它就不起作用了

我的图像:

my image

我的图像是一张扫描过的纸,有很多噪音和杂乱的区域。所以我应用了高斯模糊,大津阈值和变形关闭修复

我的代码:

# 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)

然而,轮廓是由我的代码奇怪地创建的。图像的杂乱区域被识别为轮廓

我的轮廓图像:

applied contours 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修复图像中的混乱区域

我的目标:

my goal

请给我一些建议


Tags: 代码图像image区域cv轮廓contourapply
1条回答
网友
1楼 · 发布于 2024-09-22 20:23:18

我有一个很好的观点

你只需要腐蚀然后扩张它。它实际上可以使用相同的内核和迭代

其主要目的是:

  1. 随着侵蚀,保证那个小小的白色形状被杀死
  2. 通过膨胀,恢复感兴趣区域中侵蚀的白色形状(大形状)

所以,你应该腐蚀,直到所有的小形状都被杀死,然后试着通过扩张恢复大形状的原始大小

相关问题 更多 >