gpt4 book ai didi

python - 如何在OpenCV/Python中的框架上绘制单个圆,同时不断更新x-y位置并重新绘制?

转载 作者:行者123 更新时间:2023-12-02 16:56:38 25 4
gpt4 key购买 nike

我希望基于鼠标单击在视频的第一帧上绘制一个圆圈,如果用户选择其他位置(即一次只能在一个帧上绘制一个圆圈),则刷新该圆圈。为此,我会在初始帧捕获后复制原始图像,并在每次绘制新圆之前都还原为原始图像。

在我的真实代码中,xpos和ypos对鼠标单击和向轨迹栏输入的半径作出响应,但为简单起见,在下面我只是在while循环内系统地对x和y进行了递增(下面的代码仍然无法达到我的预期)。

我从这段代码中得到的是在第一帧上绘制的一堆圆圈,而不是我期望的一次。

firstframe = 1 
cv2.namedWindow('test')
cap = cv2.VideoCapture('video.mp4')
if cap.isOpened():
ret, originalframe = cap.read() # read frame 1
frame = originalframe
cap.release()

xpos = 10
ypos = 10


while (firstframe == 1):
frame = originalframe #revert to the original frame
cv2.circle(frame, (xpos, ypos), 100, (0, 255, 1), thickness=1, lineType=8, shift=0) #draw circle
xpos = xpos +10 #move circle pos
ypos = ypos + 10 #move circle pos
cv2.imshow('test', frame) #draw
if cv2.waitKey(33) & 0xFF == ord(' '): #hit space-bar when done...
firstframe = 0

这是输出的截图-太多圈子:

我正在运行带Python / OpenCV 2的Mac OS X 10.9。

最佳答案

frame = originalframe仅将frame指向originalframe所指向的数据。现在,在您的代码中,圆圈是在原始数据本身上绘制的!

您将必须为frame创建数据副本:

  • CloneImage:将一个IplImage克隆到另一个IplImage。
  • CloneMat:将Mat类型克隆为另一个Mat类型。
  • Copy:如果已定义头,则复制数据。
  • 关于python - 如何在OpenCV/Python中的框架上绘制单个圆,同时不断更新x-y位置并重新绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21848307/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com