Created
September 11, 2022 06:14
-
-
Save akirayou/5fa28948e0a26e1a8dcbacfb6e401c06 to your computer and use it in GitHub Desktop.
arucoIDで記入欄位置を特定して、マスク合成して切りだすサンプル。 記入用紙IDもArucoで処理。 Arucoマーカーを手書きするやつはerror扱い。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from xml.dom import INDEX_SIZE_ERR | |
import cv2 | |
import numpy as np | |
import os | |
import glob | |
from cv2 import aruco | |
W=400 | |
H=400 | |
dir=r"C:\scan" | |
dict_aruco = aruco.Dictionary_get(aruco.DICT_4X4_50) | |
parameters = aruco.DetectorParameters_create() | |
def on_error(path): | |
print("読み込めませんでした、やりなおし",path) | |
for path in glob.glob(dir+"/*.jpg"): | |
raw = cv2.imread(path) | |
gray = cv2.cvtColor(raw, cv2.COLOR_RGB2GRAY) | |
corners, ids, rejectedImgPoints = aruco.detectMarkers(gray, dict_aruco, parameters=parameters) | |
if ids is None or len(ids)!=5: | |
print("マーカーがうまく読み取れなかった") | |
on_error(path) | |
continue | |
ids=np.array([i[0] for i in ids]) | |
idx=np.argsort(ids) | |
ids=ids[idx] | |
pos= np.array([np.mean(c,axis=1).reshape(-1) for c in corners] ) [idx,:] | |
marker_id=ids[-1]-10 | |
if (ids[:4] != np.array([0,1,2,3])).any() or marker_id<0: | |
print("マーカー番号が変だった") | |
on_error(path) | |
continue | |
print(path,ids,pos) | |
dist_pos=np.array(((0,0),(0,H),(W,H),(W,0) )).astype(np.float32) | |
src_pos=pos[:4,:].astype(np.float32) | |
print(src_pos,dist_pos) | |
M= cv2.getPerspectiveTransform(src_pos,dist_pos) | |
src = cv2.warpPerspective(raw, M,(W,H)) | |
mask = cv2.imread("mask_%d.png"%(marker_id),0) | |
# Point 2: 元画像をBGR形式からBGRA形式に変換 | |
dst = cv2.cvtColor(src, cv2.COLOR_BGR2BGRA) | |
dst[:,:,3] = mask | |
# png画像として出力 | |
cv2.imwrite(dir+"/in/%d_"%(marker_id)+ os.path.splitext(os.path.basename(path))[0]+".png", dst) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment