下面我将为您详细讲解“python基于opencv实现一个鼠标绘图小程序”的完整攻略。
简介
本文介绍如何使用Python和OpenCV库来实现一个简单的鼠标绘图小程序。主要包含以下步骤:
- 创建窗口
- 绑定鼠标事件
- 绘制图形
- 退出程序
创建窗口
首先需要导入OpenCV库并创建一个窗口。可以使用cv2.namedWindow()
函数来创建一个窗口,并指定窗口的名称和大小。
import cv2
# 创建窗口并设置名称和大小
cv2.namedWindow("Mouse Drawing")
cv2.resizeWindow("Mouse Drawing", 640, 480)
# 显示窗口
cv2.imshow("Mouse Drawing", img)
绑定鼠标事件
接下来,需要设置鼠标事件。OpenCV提供了cv2.setMouseCallback()
函数来设置鼠标事件。可以使用以下代码来设置一个鼠标点击事件。
# 定义鼠标事件处理函数
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
# 绘制圆形
cv2.circle(img, (x, y), 25, (0, 0, 255), -1)
# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_circle)
以上代码定义了一个鼠标事件处理函数draw_circle()
,用于在窗口中绘制圆形。使用cv2.setMouseCallback()
函数将draw_circle()
绑定到Mouse Drawing
窗口的鼠标事件中。
绘制图形
现在已经成功绑定了鼠标事件,下一步是在窗口中实现绘制图形功能。此处以绘制圆形为例。
这里使用cv2.circle()
函数来绘制圆形。在鼠标事件处理函数中调用该函数并传递所需参数。
# 定义鼠标事件处理函数
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
# 绘制圆形
cv2.circle(img, (x, y), 25, (0, 0, 255), -1)
# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_circle)
以上代码当鼠标左键按下时,在img
图像上绘制一个半径为25
的红色圆形。
退出程序
当完成绘图后,需要按ESC
键退出程序。使用cv2.waitKey()
函数来等待用户按下键盘上的某个键。
while True:
cv2.imshow("Mouse Drawing", img)
if cv2.waitKey(20) & 0xFF == 27:
break
# 关闭窗口
cv2.destroyAllWindows()
以上代码在一个无限循环中等待用户按下键盘上的某个键。当用户按下ESC
键时,关闭窗口并释放内存。
示例
下面是两个示例,第一个示例演示如何在图像中绘制直线,第二个示例演示如何在图像中绘制矩形。
示例1:绘制直线
import cv2
# 创建窗口并设置名称和大小
cv2.namedWindow("Mouse Drawing")
cv2.resizeWindow("Mouse Drawing", 640, 480)
# 创建一张空白图像
img = cv2.imread("test.jpg")
img = cv2.resize(img, (640, 480))
# 定义鼠标事件处理函数
def draw_line(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
# 设置起点
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
param["start_point"] = (x, y)
elif event == cv2.EVENT_LBUTTONUP:
# 设置终点
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
param["end_point"] = (x, y)
# 绘制直线
cv2.line(img, param["start_point"], param["end_point"], (0, 255, 0), 2)
# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_line, {"start_point": None, "end_point": None})
# 循环显示图像,按ESC键退出程序
while True:
cv2.imshow("Mouse Drawing", img)
if cv2.waitKey(20) & 0xFF == 27:
break
# 关闭窗口
cv2.destroyAllWindows()
示例2:绘制矩形
import cv2
# 创建窗口并设置名称和大小
cv2.namedWindow("Mouse Drawing")
cv2.resizeWindow("Mouse Drawing", 640, 480)
# 创建一张空白图像
img = cv2.imread("test.jpg")
img = cv2.resize(img, (640, 480))
# 定义鼠标事件处理函数
def draw_rectangle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
# 设置起点
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
param["start_point"] = (x, y)
elif event == cv2.EVENT_LBUTTONUP:
# 设置终点
cv2.circle(img, (x, y), 5, (0, 0, 255), -1)
param["end_point"] = (x, y)
# 绘制矩形
cv2.rectangle(img, param["start_point"], param["end_point"], (0, 255, 0), 2)
# 绑定鼠标事件处理函数
cv2.setMouseCallback("Mouse Drawing", draw_rectangle, {"start_point": None, "end_point": None})
# 循环显示图像,按ESC键退出程序
while True:
cv2.imshow("Mouse Drawing", img)
if cv2.waitKey(20) & 0xFF == 27:
break
# 关闭窗口
cv2.destroyAllWindows()
以上就是“python基于opencv实现一个鼠标绘图小程序”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 基于opencv 实现一个鼠标绘图小程序 - Python技术站