この画像のように画像自体が変換されました。
そしてこの画像自体の点の座標を画像に表示させるようにしたいです。
コンパイルして実行した後の画像の点の位置にカーソルを合わせると、確かに座標自体は表示されるのですが
実際は変換前も変換後も座標は1点だけなので、その値が知りたいです。
誰か方法やアドバイスをお願いいたします。
import cv2 import numpy as np from matplotlib import pyplot as plt src= cv2.imread("ao.png") hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV) cv2.imshow("z",src) #点を決める時の処理 lower_blue = np.array([90,64,0]) upper_blue = np.array([150,255,255]) dst1 = cv2.inRange(hsv, lower_blue, upper_blue) dst2 = cv2.blur(dst1, ksize=(5,5)) ret,thresh1 = cv2.threshold(dst2,127,255,cv2.THRESH_BINARY) img_col = cv2.imread("ao000.png") coat = cv2.inRange(img_col, (170,200,200), (255,255,255)) # ラベリング処理(x座標) label = cv2.connectedComponentsWithStats(thresh1) stats = label[2] area = stats[:, cv2.CC_STAT_WIDTH] * stats[:, cv2.CC_STAT_HEIGHT] top2_idx = area.argsort()[-3:-1] # 2番目、3番めに面積が大きいラベル (1番目は背景なので除く) # オブジェクト情報を項目別に抽出 data = label[2] center = label[3] # ラベリング結果書き出し用に二値画像をカラー変換 color_src = cv2.cvtColor(thresh1, cv2.COLOR_GRAY2BGR) lst_pos = [] for i in top2_idx: x0 = data[i][0] y0 = data[i][1] x1 = data[i][0] + data[i][2] y1 = data[i][1] + data[i][3] cv2.rectangle(color_src, (x0, y0), (x1, y1), (0, 0, 255)) cv2.putText(color_src, "X: " + str(int(center[i][0])), (x1 - 10, y1 + 15), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 255)) cv2.putText(color_src, "Y: " + str(int(center[i][1])), (x1 - 10, y1 + 30), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 255)) # 追加コード: 重心座標を書き出す # img = thresh1[y0:y1,x0:x1] # lst_pos.append((y0,y1,x0,x1,int(center[i][0]))) lst_pos.append((int(center[i][0]),int(center[i][1]))) ############################################## # 内外判定 poly = np.array([[int(x0),int(y0)], [int(x0),int(y1)], [int(x1),int(y1)], [int(x1),int(y0)]]) for j in range(len(lst_pos)): if cv2.pointPolygonTest( poly, lst_pos[j], False)== 1: # print("in") # 青で描画 coat = cv2.circle(coat,(lst_pos[j][0],lst_pos[j][1]), 5, (255,0,0), -1) # else: # print("out") ############################################## # x座標の位置 cv2.imshow('x',color_src) cv2.imwrite("x4.png",color_src) cv2.imshow('coat',coat) cv2.imwrite("coat4.png",coat) # 変換前後の対応点を設 p_original = np.float32([[162,170], [338,169], [76, 548], [417, 548]]) p_trans = np.float32([[0,0], [610,0], [0,1340], [610,1340]]) # 変換マトリクスと射影変換 M = cv2.getPerspectiveTransform(p_original, p_trans) i_trans = cv2.warpPerspective(coat, M, (610, 1340)) #ここからグラフ設定 fig = plt.figure() ax1 = fig.add_subplot(111) # 画像をプロット show = cv2.cvtColor(i_trans, cv2.COLOR_BGR2RGB) ax1.imshow(show) fig.tight_layout() plt.show() plt.close() cv2.waitKey(0) cv2.destroyAllWindows()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。