opencv-python鼠标事件监控QWidget
时间: 2024-10-01 10:03:17 浏览: 23
opencv-python-4.10.0.84.tar.gz
5星 · 资源好评率100%
OpenCV-Python是一个Python接口库,用于使用OpenCV的功能,但它本身并不是直接操作Qt框架的QWidget。如果你想在PyQt5或PySide等基于Qt的GUI应用程序中使用OpenCV,并且需要监控鼠标事件,你需要结合两者进行。
首先,你需要导入必要的库,如`cv2`, `PyQt5.QtWidgets` 和 `PyQt5.QtGui`。然后创建一个继承自`QWidget`的窗口,并将OpenCV窗口嵌套在其中。你可以通过设置鼠标移动和点击事件处理器来监控鼠标活动:
```python
import cv2
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QImage, QPixmap
class CVMouseEventWindow(QWidget):
def __init__(self):
super().__init__()
self.opencv_window = QLabel(self)
self.setMouseTracking(True) # 开启鼠标跟踪
# 创建OpenCV窗口并显示图像
cap = cv2.VideoCapture(0) # 使用摄像头,0通常表示默认设备
while True:
ret, frame = cap.read()
if not ret:
break
image = QImage(frame.data, frame.shape[1], frame.shape[0], QImage.Format_RGB888)
pixmap = QPixmap.fromImage(image)
self.opencv_window.setPixmap(pixmap)
# 监听鼠标事件
pos = self.mapToGlobal(QPoint(self.mouseMoveEvent.pos().x(), self.mouseMoveEvent.pos().y()))
x, y = int(pos.x()), int(pos.y())
cv2.circle(frame, (x, y), 5, (0, 255, 0), -1) # 在原图上标记鼠标位置
cv2.imshow("OpenCV Window", frame)
key = cv2.waitKey(1)
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
app = QApplication([])
window = CVMouseEventWindow()
window.show()
app.exec_()
```
在这个例子中,当鼠标在OpenCV窗口内移动或点击时,会在原图上标记出鼠标的位置。注意,`mapToGlobal`函数用于将鼠标坐标从窗口本地空间转换到屏幕全局空间。
阅读全文