我正在尝试对图像进行去噪,然后提取包含手写线的图像的骨架。我希望线条是连续且牢固的,但是我使用的方法无法做到这一点,而且速度相对较慢。这是原始图片:
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);

最佳答案

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

09-15 13:53