Rom*_*azi 5 python image colors image-processing object
有没有办法找到具有特定颜色的对象(例如红色矩形100px 50px带白色文本)然后选择该对象并将其剪切为新文件?看下面的图片.我正在尝试制作一个脚本,用于从图像中选择数据,然后转换为文本,最后写入Excel.
我搜索了很多howtos,但没有发现任何解决我的问题.
我不知道你的真实意图,你想只阅读文字还是你喜欢也提取部分?无论如何,我将向您展示一个直接和一般的解决方案.拿到你需要的零件,最后找到钻孔代码.
对于孔洞,您需要4个模块:
cv2 (openCV)用于图像处理
numpy以处理图像上的特殊操作
pytesseract以识别文本(ocr)
pillow (pil)以准备pytesseract的图像
首先我们减少除红色以外的所有颜色 lower并upper描述了我们想过滤的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)
Run Code Online (Sandbox Code Playgroud)
由此可见:
找到轮廓
接下来,我们找到轮廓并迭代.如果我们找到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:
....
Run Code Online (Sandbox Code Playgroud)
掩盖了原来
有了boundingRect,我们提取x,y,w,h
(x, y, w, h) = cv.boundingRect(approx)
cv.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), thickness=5)
Run Code Online (Sandbox Code Playgroud)
面具上的ocr
这里来了魔法!首先,我们提取蒙版部件并将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))
Run Code Online (Sandbox Code Playgroud)
这会将每个矩形显示为小图像.您的控制台将打印出来:
L2 = 33,33
L3 = 44,44
L1 = 12,22
Run Code Online (Sandbox Code Playgroud)
码
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)
Run Code Online (Sandbox Code Playgroud)