在opencv中清理扫描的图像
Cleaning a scanned image in opencv
我正在尝试对图像进行去噪,然后提取包含手写行的图像的骨架。我希望线条是连续的、坚实的,但我使用的方法无法做到这一点,而且相对较慢。这是原始图像:原始图像
变形在变形后的图像上,你可以看到右下角的一个小岛。
上面的稀疏图像显示,这条线在接近终点时被打断了。
还有其他方法可以达到预期的效果吗?
我的代码如下:
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
,然后在用wantedContours = [x for x in contours if contourArea(x) < 50]
之类的东西过滤后,使用drawContours
、color=(255,255,255)
和thickness=-1
来屏蔽不需要的规格。
您想要对图像执行一系列关闭和打开操作。你最好了解他们是如何做出适当选择的。请参阅这篇文章:去除图像中的虚假小岛噪声-Python OpenCV
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 检查不带转换的扫描格式
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- C++:OpenCV扫描图像的性能问题
- 从节点.js中扫描的图像中评估复选框
- 扫描图像OpenCV上的文档检测
- 在opencv中清理扫描的图像
- 我怎么知道图像扫描的进度