OpenCV-Python で四角形の頂点の座標検出
解決したいこと
PythonでOpenCVを使ってPCに接続しているwebカメラで撮影している四角形の頂点の座標を取得したいです。
また、座標を取得した後に取得した座標の情報を使って座標計算の処理をしたいと考えています。
(例えば重心の計算、頂点の中点の計算など簡易的なもの)
ネット上で調べるとcv2.findCounerが良さそうだと思い、試しましたが、
望んでいる四隅以外の大量の点も拾ってきてしまい、思ったような処理ができておりません。
findContoursで指定しているcv2.CHAIN_APPROX_SIMPLEはシンプルに頂点のみ検出してくれると
予想していましたが、異なる働きをしているように感じています。
前段の処理で何かまずことをしているのでしょうか。
あるいはもっと根本に問題があるのでしょうか。
何か試してみたら良いことなどアドバイスを頂けますと助かります。
以下に作成したコード、得られた結果と画像を示します。
該当するソースコード
import cv2
import numpy as np
capture = cv2.VideoCapture(0)
while(True):
ret, frame = capture.read()
gray =cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
threshold = 255/2
ret, img_thresh = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY_INV)
contours, hierarchy = cv2.findContours(img_thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame, contours, -1, (0,255,0), 1)
cv2.imshow("title",frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
出力される結果
#contoursの中身を確認
contours
#contoursの中身
array([[[141, 39]],
[[139, 41]],
[[139, 95]],
[[140, 96]],
[[140, 97]],
[[139, 98]],
[[139, 106]], ~多数
#contoursの中身を撮影画像と重ねて可視化
import matplotlib.pyplot as plt
%matplotlib qt5
cv2.drawContours(frame, contours, -1, (0,255,255))
plt.imshow(frame)
1 likes