Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在opencv中清理扫描图像_C++_Opencv_Vision - Fatal编程技术网

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并删除小的轮廓线,例如使用
轮廓线区域