こちらバドミントンのコート画像なのですがコートの4点座標を決め枠内だけを表示させたいです
以前こちらのサイトで質問させていただき、」教えていただいたプログラムなのですが、画像を変えたものでも使えるようなプログラムにしたいです。
import cv2 import numpy as np #画像を読み込む。 img = cv2.imread("sample.jpg") # 色空間をグレースケールに変換する。 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二値化する。 ret, binary = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY_INV) # 輪郭抽出する。 contours, hierarchy = cv2.findContours( binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE ) # 面積が最大の輪郭を取得する。 contour = max(contours, key=lambda x: cv2.contourArea(x)) # 輪郭を近似する。 arclen = cv2.arcLength(contour, True) approx_contour = cv2.approxPolyDP(contour, epsilon=0.005 * arclen, closed=True) assert len(approx_contour) == 4, "以下の処理は抽出された輪郭は4点で構成されていることが前提" h, w = 600, 600 # 長方形の大きさ points1 = approx_contour.astype(np.float32) points2 = np.float32([[h, w], [w, 0], [0, 0], [0, h]]) # points1 から points2 へ写す射影変換行列を計算する。 H = cv2.getPerspectiveTransform(points1, points2) # 射影変換を画像に適用する。 dst = cv2.warpPerspective(img, H, (w, h)) # 結果を保存する。 cv2.imwrite("result.png", dst)
このようなエラーが出ます、多分輪郭がちゃんと4点でわかりやすい画像にしか対応できないのかなと思いますがコートの枠内だけを抽出するようなことは可能でしょうか?
assert len(approx_contour) == 4, "以下の処理は抽出された輪郭は4点で構成されていることが前提" AssertionError: 以下の処理は抽出された輪郭は4点で構成されていることが前提
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/18 06:12
2019/11/18 06:17
2019/11/18 09:19
2019/11/18 09:35
2019/11/18 09:42