在opencv中清理扫描图像

问题描述 投票:0回答:2

我正在尝试对图像进行去噪,然后提取包含手写线条的图像的骨架。我希望线条是连续且坚实的,但我使用的方法无法做到这一点并且相对较慢。这是原始图像: 原图

变形 在变形图像上,您可以在右下角看到一个小岛。

上面的细化图像显示线条在末端附近断开。

还有其他方法可以达到预期的效果吗?

我的代码如下所示:

int morph_elem = 2;
int morph_size = 10;
int morph_operator = 0;

Mat origImage = imread(origImgPath, CV_LOAD_IMAGE_COLOR);
medianBlur(origImage, origImage, 3);
cvtColor(origImage, origImage, COLOR_RGB2GRAY);
threshold(origImage, origImage, 0, 255, THRESH_OTSU);

Mat element = getStructuringElement(morph_elem, Size(2 * morph_size + 1, 2 * morph_size + 1), cv::Point(morph_size, morph_size));

morphologyEx(origImage, origImage, MORPH_OPEN, element);
thin(origImage, true, true, true);
c++ opencv image-processing computer-vision
2个回答
1
投票

要减少断线,请尝试使用

adaptiveThreshold
,尝试各种方法和尺寸,看看哪种最有效。 要删除小岛,只需执行
findContours
,然后在使用
drawContours
等过滤后,使用
color=(255,255,255)
thickness=-1
wantedContours = [x for x in contours if contourArea(x) < 50]
屏蔽不需要的规格。


1
投票

您想要对图像执行一系列关闭和打开操作。您最好了解它们的工作原理才能做出适当的选择。 请参阅这篇文章:去除图像中虚假的小噪声岛 - Python OpenCV

© www.soinside.com 2019 - 2024. All rights reserved.