Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击鼠标并在视频(python_opencv)中的鼠标位置绘制固定矩形_Python_Opencv_Video_Cv2 - Fatal编程技术网

单击鼠标并在视频(python_opencv)中的鼠标位置绘制固定矩形

单击鼠标并在视频(python_opencv)中的鼠标位置绘制固定矩形,python,opencv,video,cv2,Python,Opencv,Video,Cv2,因此,在我的网络摄像头/视频中,当我单击鼠标时,会在鼠标位置绘制一个矩形,矩形大小是固定的,例如80 X 80。在我当前的代码中,矩形跟随鼠标,但大小总是不同的。当我点击视频中的一帧时,我想要一个固定大小的鼠标位置 这是我的密码 import os import numpy as np import cv2 from PIL import Image import re print('kaishi') flag=0 drawing = False point1 = () point2

因此,在我的网络摄像头/视频中,当我单击鼠标时,会在鼠标位置绘制一个矩形,矩形大小是固定的,例如80 X 80。在我当前的代码中,矩形跟随鼠标,但大小总是不同的。当我点击视频中的一帧时,我想要一个固定大小的鼠标位置

这是我的密码

import os
import numpy as np
import cv2 
from PIL import Image
import re



print('kaishi')
flag=0
drawing = False

point1 = ()
point2 = ()
ref_point = []
xvalues=[];
yvalues=[];
ref_point = []


cx=0;
cy=0;
 def mouse_drawing(event, x, y, flags, params):
     global point1, point2, 
     drawing,ref_point2,flag,refPt,cropping,cx,cy



     if event == cv2.EVENT_LBUTTONDOWN:

        drawing = True
        point1 = (x, y)
        xvalues.append(x)
        yvalues.append(y)
        cx =x;
        cy=y;


elif event == cv2.EVENT_MOUSEMOVE:
    if drawing is True:
        point2 = (x, y)




elif event == cv2.EVENT_LBUTTONUP:
        flag+=1;
        print('finished square')





cap = cv2.VideoCapture(0)

cv2.namedWindow("Frame")
cv2.setMouseCallback("Frame", mouse_drawing)


while True:
   _, frame = cap.read()

      if point1 and point2 :
        cv2.rectangle(frame,(200,cy),(cx,128),(0,0,255),0)
        print(cx,cy)

        flag=0;





    cv2.imshow("Frame", frame)

key = cv2.waitKey(25)
if key== 13:

    print('done')




elif key == 27:
     break



 cap.release()
 cv2.destroyAllWindows()

问题是您固定了矩形的一个点,另一个点跟随鼠标。在您的代码中,它将位于以下位置:

cv2.rectangle(frame,(200,cy),(cx,128),(0,0,255),0)
现在,它将取决于矩形的形状,单击左上角点的位置是什么?如果是,那么应该是这样的:

cv2.rectangle(frame,(cx,cy),(cx + 80, cy +80),(0,0,255),0)
此示例适用于80 x 80矩形。。。。在您的代码中,这将在单击时发生

但是,您的代码有很多未使用的代码。。。我会这样做:

import numpy as np
import cv2 

drawing = False
point = (0,0)

def mouse_drawing(event, x, y, flags, params):
     global point, drawing
     if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        point= (x, y)

cap = cv2.VideoCapture(0)
cv2.namedWindow("Frame")
cv2.setMouseCallback("Frame", mouse_drawing)

while True:
   _, frame = cap.read()
   if drawing :
      cv2.rectangle(frame,point,(point[0]+80, point[1]+80),(0,0,255),0)

   cv2.imshow("Frame", frame)
   key = cv2.waitKey(25)
   if key== 13:    
     print('done')
   elif key == 27:
     break

 cap.release()
 cv2.destroyAllWindows()
def mouse_drawing(event, x, y, flags, params):
     global point, drawing
     if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        point = (x, y)
     elif event == cv2.EVENT_MOUSEMOVE:
       if drawing is True:
        point = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        point = (x, y)
如果您希望矩形在单击后跟随鼠标,并在松开按钮后停止跟随,请更改我在
鼠标\u绘图
功能之前提供的代码,如下所示:

import numpy as np
import cv2 

drawing = False
point = (0,0)

def mouse_drawing(event, x, y, flags, params):
     global point, drawing
     if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        point= (x, y)

cap = cv2.VideoCapture(0)
cv2.namedWindow("Frame")
cv2.setMouseCallback("Frame", mouse_drawing)

while True:
   _, frame = cap.read()
   if drawing :
      cv2.rectangle(frame,point,(point[0]+80, point[1]+80),(0,0,255),0)

   cv2.imshow("Frame", frame)
   key = cv2.waitKey(25)
   if key== 13:    
     print('done')
   elif key == 27:
     break

 cap.release()
 cv2.destroyAllWindows()
def mouse_drawing(event, x, y, flags, params):
     global point, drawing
     if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        point = (x, y)
     elif event == cv2.EVENT_MOUSEMOVE:
       if drawing is True:
        point = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        point = (x, y)

非常感谢你!!现在,我要做的下一件事是在矩形内获取帧的roi。@user3352739当然,只需提出一个新问题:)并提供您想要实现的更多细节