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

作者: ALLESSANDRO (左手只是輔助)   2021-06-18 15:25:28
個人想做的是在攝影機影像上用滑鼠自定兩個矩形
拉出第二個矩形之後之後 算出兩個矩形中心之間的距離 並清除兩個矩形 如下圖
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()
作者: lycantrope (阿寬)   2021-06-18 16:43:00
img_copy = img.copy()只用img_copy = img 只是reference到同一張img

Links booklink

Contact Us: admin [ a t ] ucptt.com