Я просмотрел другие посты, и ничто, похоже, не решило мою проблему.На данный момент я могу использовать мою функцию mouse_draw_rect
, чтобы нарисовать прямоугольник в моем видеопотоке и создать обрезанное окно.Затем я хочу дополнительно нарисовать фигуры в этом обрезанном окне, но когда я пытаюсь вызвать мою select_point
функцию, моя программа падает, и я получаю следующее: TypeError: an integer is required (got type tuple)
.Ошибка происходит в строке кода cv2.circle(cropped_window,point,(0,0,255),2)
.
Вот мой следующий код, который можно запустить с помощью opencv:
import cv2
cap = cv2.VideoCapture(0)
_, first_frame = cap.read()
def mouse_draw_rect(event, x, y, flags, params):
global point1, point2, drawing, first_frame
if event == cv2.EVENT_LBUTTONDOWN:
if drawing is False:
drawing = True
point1 = ()
point2 = ()
point1 = (x, y)
print(point1)
print(point2)
else:
drawing = False
elif event == cv2.EVENT_LBUTTONUP:
if drawing is True:
point2 = (x, y)
drawing = False
def select_point(event, x, y, flags, params):
global point, point_selected
if event == cv2.EVENT_MBUTTONDOWN:
point = (x, y)
point_selected = True
print(point)
drawing = False
point_selected = False
point1 = ()
point2 = ()
point = ()
cv2.namedWindow('Original')
cv2.setMouseCallback("Original", mouse_draw_rect)
while True:
ret, frame = cap.read( )
if point1 and point2:
cv2.rectangle(frame, point1, point2, (0, 0, 0), 2)
first_frame_roi = first_frame[point1[1]:point2[1], point1[0]:point2[0]]
cropped_window = frame[point1[1]:point2[1], point1[0]:point2[0], :]
cv2.imshow('Cropped Window', cropped_window)
cv2.namedWindow('Cropped Window')
cv2.setMouseCallback("Cropped Window", select_point)
if point_selected is True:
cv2.circle(cropped_window,point,(0,0,255),2)
cv2.imshow('Original', frame)
key = cv2.waitKey(30) & 0xff
if key == 27:
break
cap.release()
cv2.destroyAllWindows()
Дайте мне знать, если вам потребуется дополнительная информация.