OpenCV Python ŌĆō 如何使用鼠标事件绘制曲线?

OpenCV Python ŌĆō 如何使用鼠标事件绘制曲线?

在数字图像处理中,曲线绘制是非常常见的操作。利用 Python 中的 OpenCV 库,我们可以方便地使用鼠标事件来绘制曲线。

本文将带领您了解如何使用 OpenCV Python ŌĆō 使用鼠标事件绘制曲线。在此之前,我们需要先安装好 OpenCV 库。

准备工作

我们需要使用 Python 的 OpenCV 库来实现鼠标事件绘制曲线。请在您的控制台中输入以下命令来安装 OpenCV 库:

pip install opencv-python

安装完成后,我们就可以开始实现了。

实现过程

  1. 导入必要的库

我们需要使用OpenCV库中的函数cv2.namedWindow()和cv2.setMouseCallback()来实现鼠标事件监听。为了使代码更简洁,我们还将调用sys库的exit()函数来终止程序。

import cv2
import numpy as np
import sys

# 定义一些全局变量
drawing = False  # 是否绘制,初始值为False
color = (0, 0, 0)  # 绘制颜色,初始值为黑色
thickness = 3  # 线条粗细,初始值为3
  1. 定义鼠标事件监听函数
def draw_line(event, x, y, flags, param):
    global drawing

    if event == cv2.EVENT_LBUTTONDOWN:
        # 鼠标左键按下,开始绘制
        drawing = True
    elif event == cv2.EVENT_MOUSEMOVE:
        # 鼠标移动,继续绘制
        if drawing:
            cv2.line(img, (x, y), (x, y), color, thickness)
    elif event == cv2.EVENT_LBUTTONUP:
        # 鼠标左键松开,结束绘制
        drawing = False
  1. 加载图片并设置鼠标回调
img = np.full((512, 512, 3), 255, np.uint8)  # 创建一张白色的图片
cv2.namedWindow("image")
cv2.setMouseCallback("image", draw_line)  # 设置鼠标回调
  1. 实现绘制功能并展示结果
while True:
    cv2.imshow("image", img)
    key = cv2.waitKey(1) & 0xFF

    # 按ESC键退出程序
    if key == 27:
        break
    # 按C键清空已绘制的内容
    elif key == ord("c"):
        img = np.full((512, 512, 3), 255, np.uint8)
    # 按B键更改画笔颜色(黑色、白色、红色、蓝色随机切换)
    elif key == ord("b"):
        color = tuple(np.random.randint(0, 256, size=3).tolist())
    # 按T键设置画笔粗细(1~10随机)
    elif key == ord("t"):
        thickness = np.random.randint(1, 11)

cv2.destroyAllWindows() # 关闭窗口

完整代码

import cv2
import numpy as np
import sys

# 定义一些全局变量
drawing = False  # 是否绘制,初始值为False
color = (0, 0, 0)  # 绘制颜色,初始值为黑色
thickness = 3  # 线条粗细,初始值为3

def draw_line(event, x, y, flags, param):
    global drawing

    if event == cv2.EVENT_LBUTTONDOWN:
        # 鼠标左键按下,开始绘制
        drawing = True
    elif event == cv2.EVENT_MOUSEMOVE:
        # 鼠标移动,继续绘制
        if drawing:
            cv2.line(img, (x, y), (x, y), color, thickness)
    elif event == cv2.EVENT_LBUTTONUP:
        # 鼠标左键松开,结束绘制
        drawing = False

img = np.full((512, 512, 3), 255, np.uint8)
cv2.namedWindow("image")
cv2.setMouseCallback("image", draw_line)

while True:
    cv2.imshow("image", img)
    key = cv2.waitKey(1) & 0xFF

    # 按ESC键退出程序
    if key == 27:
        break
    # 按C键清空已绘制的内容
    elif key == ord("c"):
        img = np.full((512, 512, 3), 255, np.uint8)
    # 按B键更改画笔颜色(黑色、白色、红色、蓝色随机切换)
    elif key == ord("b"):
        color = tuple(np.random.randint(0, 256, size=3).tolist())
    # 按T键设置画笔粗细(1~10随机)
    elif key == ord("t"):
        thickness = np.random.randint(1, 11)

cv2.destroyAllWindows()

结论

在本文中,我们介绍了如何使用Python OpenCV来实现鼠标事件绘制曲线。首先,我们导入必要的库和定义一些全局变量。然后,我们定义了一个鼠标事件监听函数,它可以通过事件类型来响应鼠标操作并绘制曲线。接着,我们加在了一张白色的图片并设置了鼠标回调函数。最后,我们使用一个while循环来实现绘制功能,并对程序进行了一些控制,如清空已绘制的内容、更改画笔颜色和线条粗细等。

通过本文的讲解,您已经掌握了如何使用 OpenCV Python ŌĆō 使用鼠标事件绘制曲线。如果您想要进一步学习OpenCV其他功能,可以查阅OpenCV官方文档。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Python OpenCV