上記の画像の青色の三角形の座標を取得するソフトウェアを作りました。その導線を追うために、取得した座標が全て入る最小の円を描画し、その中心点を求める機能を追加したいですが、やり方がわかりません。
画像の青色の三角形の座標を取得するプログラムは
python
1# -*- coding:utf-8 -*- 2import cv2 3import numpy as np 4 5# 青色の検出 6def detect_blue_color(img): 7 # HSV色空間に変換 8 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) 9 10 # 青色のHSVの値域1 11 hsv_min = np.array([40,140,120]) 12 hsv_max = np.array([150,255,255]) 13 14 # 青色領域のマスク(255:赤色、0:赤色以外) 15 mask = cv2.inRange(hsv, hsv_min, hsv_max) 16 17 # マスキング処理 18 masked_img = cv2.bitwise_and(img, img, mask=mask) 19 20 return mask, masked_img 21 22for i in range(392): 23 img = cv2.imread('CoD/filename_{0:05d}.png'.format(i)) 24 25 # 色検出(赤、緑、青) 26 mask, masked_img = detect_blue_color(img) 27 28 # 輪郭を抽出する。 29 contours, hierarchy = cv2.findContours( 30 mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE 31 ) 32 33 # 小さい輪郭は誤検出として削除する 34 contours = list(filter(lambda x: cv2.contourArea(x) > 10, contours)) 35 36 37 def get_center(contour): 38 """輪郭の中心を取得する。 39 """ 40 # 輪郭のモーメントを計算する。 41 M = cv2.moments(contour) 42 # モーメントから重心を計算する。 43 cx = M["m10"] / M["m00"] 44 cy = M["m01"] / M["m00"] 45 46 return cx, 127-cy 47 48 # 輪郭の中心を取り出す。 49 centers = [get_center(x) for x in contours] 50 51 # 結果を CSV で保存する。 52 with open('centers2.csv','a') as f_handle: 53 np.savetxt(f_handle, centers, delimiter=",", fmt="%.0f")
で、cxと127-cyが座標を表しています。その座標をcsvファイルにて保存しているのがこのプログラムです。
詳しい方よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/07 00:16