[问题] 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