[問題] OpenCV滑鼠繪製矩形距離已刪文

看板Python作者 (左手只是輔助)時間2年前 (2021/06/18 15:25), 編輯推噓1(101)
留言2則, 1人參與, 2年前最新討論串1/1
個人想做的是在攝影機影像上用滑鼠自定兩個矩形 拉出第二個矩形之後之後 算出兩個矩形中心之間的距離 並清除兩個矩形 如下圖 https://imgur.com/MnTfMvH
想法如下: 1.在影像中(目前先用圖片測試)以滑鼠拉出第一個矩形 2.記錄第一個矩形中心 3.在影像中(目前先用圖片測試)以滑鼠拉出第二個矩形 4.記錄第二個矩形中心 5.算出距離 目前卡在幾個地方,想請教各位先進: 1.打算設定一個拉出矩形次數的參數, 初始為0, 拉出第一個矩形時為1, 拉出第二個矩形時為2 這個計數的參數 放的位置及初始化的位置 及記錄用的list 放的位置及初始化的位置 目前我是放在滑鼠右鍵事件中 因為我想不到放在哪裡比較好 放在function開始的地方又不行 請問怎麼處理比較恰當? 2.第二個矩形畫出來之後並計算出距離之後, 希望清除圖片上的矩形 雖然我在最開始有: img = cv2.imread('./Lenna.jpg') img_copy=img 但是在下面 想要把 img=img_copy的時候卻不行 請問如何處理比較恰當? 謝謝 (以下為code) import cv2 import numpy as np img = cv2.imread('./Lenna.jpg') img_copy=img def center_calc(PtA,PtB): return( (PtA[0]//2+PtB[0]//2,PtA[1]//2+PtB[1]//2 )) def distance_calc(PtA,PtB): return( ((PtA[0]-PtB[0])**2+(PtA[1]-PtB[1])**2 )**0.5) def draw_Rectangle(event,x,y,flags,param): global Start_P,End_P,d_flag,RX_CNT,zCenter if event == cv2.EVENT_RBUTTONDOWN: RX_CNT=0 zCenter=[0,0] if event == cv2.EVENT_LBUTTONDOWN: d_flag=True Start_P=(x,y) if event == cv2.EVENT_LBUTTONUP: if d_flag: End_P=(x,y) cv2.rectangle(img, Start_P, End_P, (0,255,0), 1) d_flag=False center = center_calc(Start_P,End_P) cv2.circle(img, center,2, (255,0,0), 1) zCenter[RX_CNT]=center if RX_CNT==1: print(distance_calc(zCenter[0],zCenter[1])) RX_CNT=RX_CNT+1 if RX_CNT>1: RX_CNT=0 #img=img_copy cv2.namedWindow('image') cv2.setMouseCallback('image',draw_Rectangle) while(1): cv2.imshow('image',img) if cv2.waitKey(20) & 0xFF == 27: break cv2.destroyAllWindows() -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 116.89.137.200 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1624001132.A.753.html

06/18 16:43, 2年前 , 1F
img_copy = img.copy()
06/18 16:43, 1F

06/18 16:49, 2年前 , 2F
只用img_copy = img 只是reference到同一張img
06/18 16:49, 2F
文章代碼(AID): #1Wp4fiTJ (Python)
文章代碼(AID): #1Wp4fiTJ (Python)