我正在尝试对图像进行去噪,然后提取包含手写线的图像的骨架。我希望线条是连续且牢固的,但是我使用的方法无法做到这一点,而且速度相对较慢。这是原始图片:
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=-1
和wantedContours = [x for x in contours if contourArea(x) < 50]
屏蔽掉不需要的规范。