gpt4 book ai didi

c++ - 将图像裁剪成碎片然后加入,这可以使用 OpenCV 吗?

转载 作者:太空狗 更新时间:2023-10-29 20:41:45 28 4
gpt4 key购买 nike

我有几个来自彩色图像的样本,我应该将它们转换为二进制文件。我通过使用自适应阈值 获得了最佳结果。

这些数字非常好,定义明确,但周围有噪音,例如,这些分隔每个数字的“垂直线”最终被 OCR 工具读取为数字 1。

然后我注意到图像周围的数字很干净。我想我是否可以只剪掉数字(在将图片变成黑白之前或之后?),然后将这些数字“粘贴”到白色背景上。

我尝试应用腐 eclipse 膨胀,但仍然有许多剩余的“点”。如果我能按照我的想法(上图)做,它会减少腐 eclipse /膨胀并增加切割前数字周围的“清洁”,我不知道。

这可能吗?我说得有道理吗?如果是,我怎么能用 OpenCV 做到这一点?有什么建议吗?

我正在使用的一些图像:

rgb image1

image1 after adaptive threshold

rgb image2

image2 after adaptive threshold

注意:上面的图像没有经过腐 eclipse 和/或膨胀的过程,只是自适应阈值处理。


更新:

@Mahm00d,我用第一张图片尝试了你所说的,我得到了下面的图片,非常好,但前两个数字中的反射问题仍然存在。有没有什么办法解决这一问题?我应用了自适应阈值,但图像仍然很嘈杂。

GaussianBlur + 带 OTSU 标志的阈值: gaussian + otsu

高斯模糊 + 自适应阈值: gaussian + adaptive

最佳答案

通常最好先使用一些去噪技术,例如高斯/中值模糊,然后再进行阈值处理和形态学处理:

(Java 代码)

Imgproc.cvtColor(inputMat, gMat, Imgproc.COLOR_RGB2GRAY);
// Gaussian blur : 21x21 window, sigma = 50.0 (select these accordignly)
Imgproc.GaussianBlur(gMat, gMat, new Size(21.0, 21.0), 50.0);
// Otsu thresholding (or any other thresholding techinique...)
Imgproc.threshold(gMat, gMat, 0, 255, Imgproc.THRESH_OTSU | Imgproc.THRESH_BINARY);

你的输出:

enter image description here

以上代码输出:

enter image description here


更新:

这些问题通常需要对参数值进行一些调整才能获得良好的结果并达到最佳值。对于第二张图片,这里是我使用的代码(自适应阈值)以获得更好的结果:

Imgproc.GaussianBlur(inImg, inImg, new Size(21.0, 21.0), 50.0);
Imgproc.adaptiveThreshold(inImg, inImg, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 111, -20);

结果:

enter image description here

当然不完美,但至少去掉了倒影。此外,形态学过程有助于产生更好的结果。

关于c++ - 将图像裁剪成碎片然后加入,这可以使用 OpenCV 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20277954/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com