私はpythonを使ってopencvを使っています。 私は、リンクのような異なるサイズの円のトレイを持っています。 https://is.alicdn.com/img/pb/810/421/429/429421810_364.jpg これは実際の画像ではありませんが、上記の画像と非常に似ています。 イメージ内のトレイを検出し、トレイ内のすべての穴(円)の輪郭を見つけなければなりません。画像を撮影するユーザーによってトレイが傾いている可能性があります。 これまで、私はガウスのぼかしと賢いエッジ検出を画像に使用し、ぼかしエッジ検出のギャップを閉じました。これは、Canny Edge検出後の画像です。 これは形態学後の画像です。 次に、findcontoursを使用し、4つの頂点を持つ最大の輪郭を見つけようとしました。理想的にはトレイそのものです。 輪郭検出は、左の垂直境界線と上部の水平境界線を識別することしかできません。トレイの4辺を認識できません。opencv pythonでゲームボード上で矩形を検出
これは、これまでの私のコードです:
cv2.cannyのパラメータをチューニングimport numpy as np
import cv2
import matplotlib.pyplot as plt
image = cv2.imread("img.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.GaussianBlur(image, (3, 3), 0)
image_canny = cv2.Canny(image, 30, 200)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7, 7))
gaps_closed = cv2.morphologyEx(image_canny, cv2.MORPH_CLOSE, kernel)
_, contours, _= cv2.findContours(gaps_closed.copy(), cv2.RETR_TREE,
cv2.CHAIN_APPROX_SIMPLE)
contours = sorted(contours, key = cv2.contourArea, reverse = True)
[:5]
Cnt = None
for c in contours:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.04 * peri, True)
if len(approx) == 4:
Cnt = approx
break
cv2.drawContours(image, [Cnt], -1, (0, 255, 0), 4)
plt.imshow(image)
plt.show()
参考になるあなたは、キャニーとモルフォロジー演算後の出力電流を添付することはできますか? – ZdaR
@ ZdaR:画像を追加しました。 – dep234