gpt4 book ai didi

python - 按图像中的颜色选择对象?

转载 作者:太空狗 更新时间:2023-10-30 00:43:10 25 4
gpt4 key购买 nike

有没有办法找到具有特定颜色的对象(例如带有白色文本的红色矩形 100px 50px),然后按原样选择该对象并将其剪切到新文件中?看下面的图片。我正在尝试制作一个脚本,用于从图像中选择数据,然后转换为文本,最后写入 Excel。

我在谷歌上搜索了很多指南,但没有找到任何解决我问题的方法。

Sample image

最佳答案

我不知道你的真实意图,你是想只看正文还是想把部分也摘下来?无论如何,我将向您展示一个直接的通用解决方案。拿走你需要的零件,最后找到孔码。

对于 hole bunch 你需要 4 个模块:
cv2 (openCV) 用于图像处理
numpy 处理图片的特殊操作
pytesseract 识别文本(ocr)
pillow (pil) 为 pytesseract
准备图像

加载和过滤

您的原始图片:
original

首先我们减少除红色以外的所有颜色。 lowerupper 描述了我们要过滤的 BGR(RGB = 红色、绿色、蓝色)的值。

image = cv.imread("AR87t.jpg")

lower = np.array([0, 0, 200])
upper = np.array([100, 100, 255])
shapeMask = cv.inRange(image, lower, upper)

cv.imshow("obj shapeMask", shapeMask)
cv.waitKey(0)

这表明:
shape mask

寻找轮廓
接下来,我们找到轮廓并迭代。如果我们找到 4 个角,我们将做接下来的事情......

cnts = cv.findContours(shapeMask.copy(), cv.RETR_EXTERNAL,
cv.CHAIN_APPROX_SIMPLE)[0]

for c in cnts:
peri = cv.arcLength(c, True)
approx = cv.approxPolyDP(c, 0.04 * peri, True)
if len(approx) == 4:
....



屏蔽原始
使用 boundingRect,我们提取 xywh

(x, y, w, h) = cv.boundingRect(approx)
cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=5)


mask

面具上的ocr
魔法来了!首先我们提取 mask 部分并将 openCV 图像导出为 PIL 图像。然后我们就可以运行 tesseract。

el = shapeMask.copy()[y:y + h, x:x + w]
pil_im = Image.fromarray(el)

cv.imshow("obj", el)
cv.waitKey(0)

print(pytesseract.image_to_string(pil_im))


这会将每个矩形显示为小图像。您的控制台将打印出:

L2 = 33,33
L3 = 44,44
L1 = 12,22



代码

import cv2 as cv
import numpy as np
import pytesseract
from PIL import Image



image = cv.imread("AR87t.jpg")

lower = np.array([0, 0, 200])
upper = np.array([100, 100, 255])
shapeMask = cv.inRange(image, lower, upper)

cv.imshow("obj shapeMask", shapeMask)
cv.waitKey(0)


cnts = cv.findContours(shapeMask.copy(), cv.RETR_EXTERNAL,
cv.CHAIN_APPROX_SIMPLE)[0]

for c in cnts:
peri = cv.arcLength(c, True)
approx = cv.approxPolyDP(c, 0.04 * peri, True)
if len(approx) == 4:
(x, y, w, h) = cv.boundingRect(approx)
cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=5)

print("w:%s, y:%s, w:%s, h:%s" % (x, y, w, h))

el = shapeMask.copy()[y:y + h, x:x + w]
pil_im = Image.fromarray(el)

cv.imshow("obj", el)
cv.waitKey(0)

print(pytesseract.image_to_string(pil_im))


cv.imshow("obj rectangle", image)
cv.waitKey(0)

关于python - 按图像中的颜色选择对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42316979/

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