特定の色を持つオブジェクトを見つける方法はありますか(白いテキストの赤い四角形の100px 50pxなど)、そのオブジェクトをそのまま選択して新しいファイルに切り取りますか?下の図を見てください。私は、画像からデータを選択してテキストに変換し、最後にExcelに書き込むためのスクリプトを作成しようとしています。イメージ内のオブジェクトを色で選択しますか?
私はたくさんのハウトスを見つけましたが、私の問題に対処するものは見つかりませんでした。
特定の色を持つオブジェクトを見つける方法はありますか(白いテキストの赤い四角形の100px 50pxなど)、そのオブジェクトをそのまま選択して新しいファイルに切り取りますか?下の図を見てください。私は、画像からデータを選択してテキストに変換し、最後にExcelに書き込むためのスクリプトを作成しようとしています。イメージ内のオブジェクトを色で選択しますか?
私はたくさんのハウトスを見つけましたが、私の問題に対処するものは見つかりませんでした。
私はあなたの本当の意図を知らない、あなただけの希望のテキストを読んだり、あなたは部分を抽出も好きですか? とにかく、わかりやすく、一般的な解決方法を紹介します。あなたが必要な部分を持って、最後に穴のコードを見つける。もし4つのモジュール必要孔束について
:pytesseractための画像を準備するために、テキスト(OCR)
pillow (pil)
を認識する画像
pytesseract
に特別な操作を処理する画像処理
cv2 (openCV)
numpy
を
まず、赤以外のすべての色を減らします。 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)
これは示しています
見つける輪郭
次に、我々は輪郭を見つけ、繰り返し処理します。私たちは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で
元を隠し、我々は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)
を抽出
マスク上の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))
これはあなたの小さな画像など、すべての矩形を示しています。コンソール出力します:
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バインディングを持つ** OpenCVの**、(CV =コンピュータビジョン)と呼ばれるパッケージは、ありますオブジェクトが選択される限り、おそらくあなたが望むことを行うことができます。 – martineau
画像をHSV色空間に変換 - >赤色で輪郭領域を抽出 - >抽出した赤色輪郭内で領域に対してMSERを実行 - > Tesseractでそれらを読み取ることができます –