python - 如何使用python将图像中方形标题的背景从黑色反转为白色?

标签 python image opencv image-processing computer-vision

我试图将方形标题的背景(包含 TERMS PONUMBER PROJECT 的黑色条)设置为白色,将文本设置为黑色。

sample_image of invoice

我尝试使用 findContours 方法来查找轮廓,然后裁剪和反转它们,以便我以黑色文本和白色背景的形式获得它们。但问题是我不知道如何继续或是否有更好的方法

image =cv2.imread("default.jpg")
gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

th, thresh = cv2.threshold(gray,1, 255, cv2.THRESH_BINARY_INV)

kernel = cv2.getStructuringElemnt(cv2.MORPH_ELLIPSE,(7,7))
morp_image = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

contours = cv2.findContours(morp_image, 
cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
cnts = sorted(contours,key=cv2.contourArea)[-1]

上面的代码确实在单独的基础上找到每个这样的轮廓,就像如果我将代码最后一行中的 [-1] 更改为 [-2],它将找到下一个轮廓,但我想找到所有这样的轮廓一次性将图像中的区域设置为白色,同时将文本更改为黑色。

谢谢

最佳答案

这是一个简单的方法

  • 将图像转换为灰度和高斯模糊
  • Otsu获取二值图像的阈值
  • 查找轮廓
  • 使用角点数量和轮廓面积进行过滤
  • 提取 ROI、反转 ROI,并替换为原始图像

这个想法是,如果轮廓有 4 个角,那么它一定是正方形/矩形。此外,我们使用最小轮廓区域进行过滤以忽略噪声。如果轮廓通过了我们的过滤器,那么我们就有了想要反转的 ROI。检测到的 ROI

enter image description here

现在我们使用 Numpy 切片提取每个 ROI。这是反转之前和之后的每个 ROI

enter image description here enter image description here

enter image description here enter image description here

enter image description here enter image description here

enter image description here enter image description here

现在我们只需将每个倒置的 ROI 替换回原始图像即可得到结果

enter image description here

import cv2

image = cv2.imread('1.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

cnts = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.015 * peri, True)
    area = cv2.contourArea(c)
    if len(approx) == 4 and area > 1000:
        x,y,w,h = cv2.boundingRect(c)
        ROI = 255 - image[y:y+h,x:x+w]
        image[y:y+h, x:x+w] = ROI

cv2.imshow('image', image)
cv2.imwrite('image.png', image)
cv2.waitKey()

关于python - 如何使用python将图像中方形标题的背景从黑色反转为白色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57903809/

相关文章:

python - 在 Python 中递归添加字典

ios - 检查 UIbutton setImage 是否在 iOS 中被调用

matlab - 为什么 OpenCV cv2.resize 给出的答案与 MATLAB imresize 不同?

python - 使用 Gtk 3 在 Python 中加载并显示来自网络的图像?

python - 将 “libpython2.7.a”版本从2.7.5更改为2.7.6以安装opencv 2.4.9

node.js - 在OpenCV calibrateCamera cameraMatrix和distCoeffs参数中用作输入的内容是什么?

python - 无法使用 selenium 和 python 从 html 表中检索链接

python - 使用 ols(python statsmodel)是否适用于纵向数据和多个因变量?

python - Django 。我怎样才能在模型中做一些数学运算

HTML 图像覆盖图像