閾値処理 座標計算
解決したいこと
Pythonで画像にマスク処理を行い、発光点を検出&重心計算を行うプログラムを作成しています。
発光のドット数が1ドット小さいものの重心を求めるときにエラーが発生します。
発光点のドット数が多いものは重心を求めることが出来ています。
解決方法を教えて下さい。
発生している問題・エラー
x = int(result["m10"]/result["m00"])
ZeroDivisionError: float division by zero
または、問題・エラーが起きている画像をここにドラッグアンドドロップ。
該当するソースコード
import cv2
import numpy as np
import csv
threshold=0
lower_S=np.array([0,0,20])
upper_S=np.array([180,83,255])
lower_V=np.array([0,0,94])
upper_V=np.array([180,255,255])
picture="025145_Lv1.jpg"
img= cv2.imread( picture)
# hsv色空間に変換
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
#mask処理
img_mask1=cv2.inRange(hsv,lower_S,upper_S)
img_mask2=cv2.inRange(hsv,lower_V,upper_V)
img_mask=cv2.bitwise_or(img_mask1,img_mask2)
img_masked=cv2.bitwise_and(img,img,mask=img_mask)
#grayscale変換
dst = cv2.cvtColor(img_masked,cv2.COLOR_BGR2GRAY)
#輪郭検出
contours,hierarchy =cv2.findContours(dst,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
#面積計算
areas = np.array(list(map(cv2.contourArea,contours)))
# 重心の計算
max_idx = np.argmax(areas)
max_area = areas[max_idx]
result = cv2.moments(contours[max_idx])
x = int(result["m10"]/result["m00"])
y = int(result["m01"]/result["m00"])
coordination=([x],[y])
#CSVファイル作成
with open('Cordinations.csv','a',newline="") as f:
writer=csv.writer(f)
writer.writerow([x,y])
f.close()
```

0 likes