Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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
Python 有没有更好的方法将文字与背景分开?_Python_Opencv_Ocr_Image Thresholding - Fatal编程技术网

Python 有没有更好的方法将文字与背景分开?

Python 有没有更好的方法将文字与背景分开?,python,opencv,ocr,image-thresholding,Python,Opencv,Ocr,Image Thresholding,我正在进行一个项目,我应该在其中申请一些文档的OCR。 第一步是对图像设置阈值,只允许写入(使背景变白) 输入图像示例:(出于GDPR和隐私原因,此图像来自互联网) 这是我的代码: import cv2 import numpy as np image = cv2.imread('b.jpg') image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) h = image.shape[0] w = image.shape[1] for y in ran

我正在进行一个项目,我应该在其中申请一些文档的OCR。
第一步是对图像设置阈值,只允许写入(使背景变白)

输入图像示例:(出于GDPR和隐私原因,此图像来自互联网)

这是我的代码:

import cv2
import numpy as np


image = cv2.imread('b.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
h = image.shape[0]
w = image.shape[1]
for y in range(0, h):
    for x in range(0, w):
        if image[y, x] >= 120:
            image[y, x] = 255
        else:
            image[y, x] = 0
cv2.imwrite('output.jpg', image)
以下是我得到的结果:

import cv2
import numpy as np


image = cv2.imread('b.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
h = image.shape[0]
w = image.shape[1]
for y in range(0, h):
    for x in range(0, w):
        if image[y, x] >= 120:
            image[y, x] = 255
        else:
            image[y, x] = 0
cv2.imwrite('output.jpg', image)

当我将pytesseract应用于输出图像时,结果并不令人满意(我知道OCR并不完美)。虽然我试图调整阈值(在这段代码中它等于120),但结果并不像我想要的那样清楚

有没有一种方法可以设置一个更好的阈值,以便只将书写内容保持为黑色,而将其余部分保持为白色?您可以使用。从文件:

在这种情况下,该算法计算图像小区域的阈值。因此,对于同一图像的不同区域,我们可以得到不同的阈值,对于不同照明的图像,我们可以得到更好的结果

你可以用。从文件:

在这种情况下,该算法计算图像小区域的阈值。因此,对于同一图像的不同区域,我们可以得到不同的阈值,对于不同照明的图像,我们可以得到更好的结果


在深入研究StackOverflow问题后,我发现了关于使用opencv删除水印的问题。 我根据自己的需要修改了代码,这就是我得到的:

import numpy as np
import cv2


image = cv2.imread('a.png')
img = image.copy()

alpha =2.75
beta = -160.0

denoised = alpha * img + beta
denoised = np.clip(denoised, 0, 255).astype(np.uint8)

#denoised = cv2.fastNlMeansDenoising(denoised, None, 31, 7, 21)

img = cv2.cvtColor(denoised, cv2.COLOR_BGR2GRAY)

h = img.shape[0]
w = img.shape[1]

for y in range(0, h):
    for x in range(0, w):
        if img[y, x] >= 220:
            img[y, x] = 255
        else:
            img[y, x] = 0

cv2.imwrite('outpu.jpg', img)
以下是输出图像:

这段代码的好处在于,它不仅对这幅图像,而且对我测试的所有图像都有很好的效果。


我希望它能帮助任何有同样问题的人。

在深入研究堆栈溢出问题后,我发现了使用opencv删除水印的方法。 我根据自己的需要修改了代码,这就是我得到的:

import numpy as np
import cv2


image = cv2.imread('a.png')
img = image.copy()

alpha =2.75
beta = -160.0

denoised = alpha * img + beta
denoised = np.clip(denoised, 0, 255).astype(np.uint8)

#denoised = cv2.fastNlMeansDenoising(denoised, None, 31, 7, 21)

img = cv2.cvtColor(denoised, cv2.COLOR_BGR2GRAY)

h = img.shape[0]
w = img.shape[1]

for y in range(0, h):
    for x in range(0, w):
        if img[y, x] >= 220:
            img[y, x] = 255
        else:
            img[y, x] = 0

cv2.imwrite('outpu.jpg', img)
以下是输出图像:

这段代码的好处在于,它不仅对这幅图像,而且对我测试的所有图像都有很好的效果。


我希望它能帮助任何有同样问题的人。

将你的个人/某人ID发布到网上不是一个好主意。谢谢你,我完全知道,这是我从网上下载的一张图片。底部看起来很干净,这就是你想要解码的吗?@MarkRansom,不仅仅是底部。主要是姓名、姓氏、日期和出生地将你的个人/某人ID发布到网上不是一个好主意。谢谢,我完全知道,这是我从网上下载的一张图片。底部看起来很干净,这就是你想要解码的吗?@markranson,不仅仅是底部。主要是姓名、姓氏、出生日期和地点。不幸的是,这也没有给出更好的结果:背景仍然很嘈杂,因此文字还不清楚。您需要相应地更改
adaptiveThreshold
方法的最后两个参数,以获得更好的结果谢谢,我会尝试。事实上,我试图调整参数,但效果不太好。不幸的是,这也没有带来更好的效果:背景仍然很嘈杂,因此文字还不清楚。您需要相应地更改
adaptiveThreshold
方法的最后两个参数,以获得更好的效果谢谢,我会尝试。事实上,我试着调整参数,但效果不好。