在opencv中清理扫描图像

时间:2016-08-22 14:12:47

标签: c++ opencv vision

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

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

上面的细化图像显示线条在末端附近被打破。

任何其他方法可以达到预期效果?

我的代码如下所示:

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

2 个答案:

答案 0 :(得分:1)

要减少换行符,请尝试使用adaptiveThreshold,使用方法和大小,看看效果最佳。 要删除小岛,只需执行findContours,然后使用drawContours color=(255,255,255)thickness=-1使用wantedContours = [x for x in contours if contourArea(x) < 50]屏蔽不需要的规范。 }}

答案 1 :(得分:1)

您想对图像执行一系列关闭和打开操作。您最好了解他们如何做出适当的选择。 请参阅此帖子:Remove spurious small islands of noise in an image - Python OpenCV