[Ch 08]ビデオ分割とオブジェクト検出-モーメントベースのオブジェクト検出
8854 ワード
モーメンツとは?
Huの7つの不変モーメント(Hu's 7不変モーメント)
けいじょうひかくかんすう
cv2.matchShapes(contour1, contour2, method, parameter) -> retval
使用
cv2.CONTOURs_MATCH_l1
・cv2.CONTOURs_MATCH_l2
・cv2.CONTOURs_MATCH_l3
の一つcv2.CONTOURs_MATCH_l3
がベストな方法です.モーメントベースのオブジェクト検出例
obj = cv2.imread('spades.png', cv2.IMREAD_GRAYSCALE)
src = cv2.imread('symbols.png', cv2.IMREAD_GRAYSCALE)
# 객체 영상 외곽선 검출
_, obj_bin = cv2.threshold(obj, 128, 255, cv2.THRESH_BINARY_INV)
obj_contours, _ = cv2.findContours(obj_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
obj_pts = obj_contours[0]
# 입력 영상 분석
_, src_bin = cv2.threshold(src, 128, 255, cv2.THRESH_BINARY_INV)
contours, _ = cv2.findContours(src_bin, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
# 결과 영상
dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)
# 입력 영상의 모든 객체 영역에 대해서
for pts in contours:
if cv2.contourArea(pts) < 1000:
continue
rc = cv2.boundingRect(pts)
cv2.rectangle(dst, rc, (255, 0, 0), 1)
# 모양 비교
dist = cv2.matchShapes(obj_pts, pts, cv2.CONTOURS_MATCH_I3, 0) # dist 값으로 유사도 측정
cv2.putText(dst, str(round(dist, 4)), (rc[0], rc[1] - 3),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 1, cv2.LINE_AA)
if dist < 0.1: # dist 값이 작을수록 obj와 유사하다.
cv2.rectangle(dst, rc, (0, 0, 255), 2)
dist値の低いオブジェクトが検出されました.
Reference
この問題について([Ch 08]ビデオ分割とオブジェクト検出-モーメントベースのオブジェクト検出), 我々は、より多くの情報をここで見つけました https://velog.io/@redorangeyellowy/ch08-영상-분할과-객체-검출-모멘트-기반-객체-검출テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol