C++ 在opencv中清理扫描图像
我尝试去噪图像,然后提取包含手写行的图像骨架。我希望这条线是连续的和坚实的,但我使用的方法无法做到这一点,而且速度相对较慢。这是原始图像: 在变形图像上,您可以在右下角看到一个小岛 从上面的细化图像显示,该线在接近终点处断开 有没有其他方法可以达到预期的效果 我的代码如下所示:C++ 在opencv中清理扫描图像,c++,opencv,vision,C++,Opencv,Vision,我尝试去噪图像,然后提取包含手写行的图像骨架。我希望这条线是连续的和坚实的,但我使用的方法无法做到这一点,而且速度相对较慢。这是原始图像: 在变形图像上,您可以在右下角看到一个小岛 从上面的细化图像显示,该线在接近终点处断开 有没有其他方法可以达到预期的效果 我的代码如下所示: int morph_elem = 2; int morph_size = 10; int morph_operator = 0; Mat origImage = imread(origImgPath, CV_LOA
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
,尝试各种方法和大小,看看哪种方法效果最好。
要移除小岛,只需使用
查找轮廓
,然后使用绘制轮廓
和颜色=(255255255)
和厚度=-1
在使用类似wantedContours=[x表示轮廓中的x,如果轮廓面积(x)<50]的内容进行过滤后,即可使用绘制轮廓
若要减少线断开,请尝试使用自适应阈值
,尝试各种方法和大小,看看哪种方法最有效。
要移除小岛,只需使用
查找轮廓
,然后使用绘制轮廓
和颜色=(255255255)
和厚度=-1
在使用类似wantedContours=[x表示轮廓中的x,如果轮廓面积(x)<50]的内容进行过滤后,即可使用绘制轮廓
您希望对图像执行一系列关闭和打开操作。您最好了解它们是如何工作的,以便做出适当的选择。
请参阅本文:您想对图像执行一系列关闭和打开操作。您最好了解它们是如何工作的,以便做出适当的选择。 请参阅此帖子:在二值图像(阈值后)上,您可以
查找轮廓线
s并删除小的轮廓线,例如在二值图像上使用轮廓线区域
(阈值后)您可以查找轮廓线
s并删除小的轮廓线,例如使用轮廓线区域