【问题标题】:Python Opencv, don't put circle on the videoPython Opencv,不要在视频上放圆圈
【发布时间】:2017-05-11 20:24:00
【问题描述】:

我用 OpenCV 编写了以下脚本

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
ix, iy = -1, -1

def draw_circle(event, x, y, flags, param):
    global ix
    global iy
    ix,iy = x,y

    if event == cv2.EVENT_LBUTTONDOWN:
        cv2.circle(img, (200, 399), 10, (0, 255, 255), -1)
        print("Text Put")
    elif event == cv2.EVENT_LBUTTONUP:
        print("EVENT_LBUTTONUP")
    elif event == cv2.EVENT_RBUTTONDOWN:
        print("Appuyé Droite")
    elif event == cv2.EVENT_RBUTTONUP:
        print("EVENT_RBUTTONUP")
    elif event == cv2.EVENT_MOUSEMOVE:
        print("Move on", x, y)

while(1):
    ret, img = cap.read()
    cv2.setMouseCallback('image', draw_circle)
    cv2.imshow('image', img)
    if cv2.waitKey(20) & 0xFF == 27:
        break

cv2.destroyAllWindows()

但是当我单击右键时,显示屏上没有出现圆圈。我的代码有什么问题?

【问题讨论】:

  • 从您的代码中,只有 left 按钮向下触发绘制圆圈,而不是右键。
  • 呵呵,对不起,我想说左键,但是当我把 tu circle 放在 while 循环上时,它的工作,圆圈跟随鼠标,但我想放一个修复圆圈,也许是它不工作?
  • 只需将imshow 放在draw_circle 函数中(最后)。否则,您将在函数内部修改 img,但更改是本地的,因此当您在函数外部显示它时,更改将丢失

标签: python opencv


【解决方案1】:

此代码 sn-p 可以帮助您入门:

import cv2
import numpy as np
cap = cv2.VideoCapture(0)
ix, iy = -1,-1

def mouseCallback(event,x,y,flags,param):
    global ix
    global iy

    if event == cv2.EVENT_LBUTTONDOWN:
        ix = x # saves the position of the last click
        iy = y

    elif event == cv2.EVENT_LBUTTONUP:
        print("EVENT_LBUTTONUP")

    elif event == cv2.EVENT_RBUTTONDOWN:
        print("Appuyé Droite")

    elif event == cv2.EVENT_RBUTTONUP:
        print("EVENT_RBUTTONUP")

def draw_circle_onscreen(frame, x,y):
    cv2.circle(frame, (x,y), 10,(0, 0, 255),-1)

cv2.namedWindow('frame')
cv2.setMouseCallback('frame',mouseCallback) # mouse callback has to be set only once

while(1):
    ret, img = cap.read()
    draw_circle_onscreen(img,ix,iy) # draws circle on screen
    cv2.imshow('frame',img)
    if cv2.waitKey(20) & 0xFF == 27:
        break

cv2.destroyAllWindows()

【讨论】:

  • @PigiBouxx 如果我的回答对你有帮助,请考虑接受。
  • @PigiBouxx 我的答案左上角应该有一个灰色的复选标记(更多详细信息:meta.stackexchange.com/a/5235
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 2015-10-17
  • 2020-10-28
相关资源
最近更新 更多