python opencv鼠标画点之cv2.drawMarker()函数

当我们在进行图像处理时,需要在图像上标记一些点或者用不同的形状进行标注,这时候我们就需要使用OpenCV的绘图函数了。cv2.drawMarker()是opencv中的一个绘图函数,它可以在图像上绘制指定位置的Marker,即标记点。本篇文章将详细介绍cv2.drawMarker()函数的用法,以及如何实现在opencv中用鼠标画点。

drawMarker()函数的语法和参数

cv2.drawMarker()函数的语法如下:

cv2.drawMarker(image, position, color, markerType, markerSize, thickness, line_type)

其中各参数的含义如下:

  • image:要绘制Marker的图像数组;
  • position:Marker的位置,即一个二元元组,格式为(x,y),表示Marker在图像上的横纵坐标;
  • color:Marker的颜色,即一个三元素的RGB元组;
  • markerType:Marker的类型,支持以下7种marker类型:
    • cv2.MARKER_CROSS:十字型;
    • cv2.MARKER_TILTED_CROSS:斜十字型;
    • cv2.MARKER_STAR:星型;
    • cv2.MARKER_DIAMOND:菱形;
    • cv2.MARKER_SQUARE:正方形;
    • cv2.MARKER_TRIANGLE_UP:上三角;
    • cv2.MARKER_TRIANGLE_DOWN:下三角;
  • markerSize:Marker的大小,即像素大小;
  • thickness:Marker轮廓线粗细;
  • line_type:Marker轮廓线类型,支持以下4种线型:
    • cv2.LINE_4:四联通线型,即四领域连接线型;
    • cv2.LINE_8:八联通线型,即八领域连接线型;
    • cv2.LINE_AA:反锯齿线型,即Anti-aliasing线型。

鼠标画点示例

以下将演示如何使用cv2.drawMarker()函数实现在opencv中用鼠标画点的功能。这里会给出两种不同的实现方式,一种是在静态图像上画点,一种是在摄像头实时画点。

在静态图像上画点

import cv2

def draw_circle(event, x, y, flags, param):
    global mouseX, mouseY
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.drawMarker(img, (x, y), (0, 0, 255), cv2.MARKER_STAR, 30, 2)

img = cv2.imread('test.jpg')
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)

while True:
    cv2.imshow('image', img)
    k = cv2.waitKey(20) & 0xFF
    if k == 27:
        break

cv2.destroyAllWindows()

以上代码中,我们定义了一个绘图函数draw_circle(),它的作用是在指定位置画一个红色的星型Marker。然后我们通过cv2.setMouseCallback()函数将绘图函数绑定到图像上鼠标双击事件上。

在主循环中通过cv2.imshow()函数显示图像,通过cv2.waitKey()函数等待用户操作,如果用户按下ESC键则退出程序。

在实时图像上画点

import cv2

def draw_circle(event, x, y, flags, param):
    global mouseX, mouseY
    if event == cv2.EVENT_LBUTTONDBLCLK:
        cv2.drawMarker(frame, (x, y), (0, 0, 255), cv2.MARKER_STAR, 30, 2)

cap = cv2.VideoCapture(0)
cv2.namedWindow('frame')
cv2.setMouseCallback('frame', draw_circle)

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        cv2.imshow('frame',frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

以上代码中,我们定义了一个回调函数draw_circle(),实现了在摄像头拍摄的实时画面上双击鼠标即在指定位置画一个红色的星型Marker。通过cv2.setMouseCallback()函数将该回调函数绑定到摄像头实时捕获的图像上。然后我们通过cv2.VideoCapture()函数初始化一个视频捕获器,通过cv2.imshow()函数显示捕获到的图像,并在ESC键被按下时退出程序。

总结

以上是关于python opencv鼠标画点之cv2.drawMarker()函数的完整攻略。通过本篇文章的介绍,我们可以清晰明了地了解到cv2.drawMarker()函数的语法和参数,并掌握了在静态图像和实时图像上使用该函数绘制Marker的方法。这对于图像处理有很大的帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python opencv鼠标画点之cv2.drawMarker()函数 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • Python venv虚拟环境配置过程解析

    Python虚拟环境是Python开发中的一个重要工具,可以帮助开发者在不同的项目中使用不同的Python版本和依赖库。Python 3.3及以上版本中,可以使用venv模块创建虚拟环境。以下是Pythonvenv虚拟环境配置过程解析: 创建虚拟环境 使用venv模块创建虚拟环境的基本语法如下: python -m venv /path/to/new/vir…

    python 2023年5月14日
    00
  • Python编码时应该注意的几个情况

    当我们使用Python编写代码时,有一些情况需要特别注意,下面我会为大家详细讲解。 1.指定编码方式 在Python2中,默认的源文件编码是ASCII,而在Python3中则是UTF-8。因此,在编写代码时,需要指定正确的编码方式。一般情况下,我们会在源文件开头指定编码方式,具体操作如下: # -*- coding: utf-8 -*- 其中,utf-8是指…

    python 2023年5月31日
    00
  • 使用Python进行数独求解详解(一)

    下面是详细讲解“使用Python进行数独求解详解(一)”的完整攻略。 数独简介 数独是一种逻辑游戏,玩家需要在9×9的网格填入数字,使得每行、每列和每个3×3的网格中的数字都是1-9的不重复数字。数独难度分为简单、中等和困难三个等级。 数独求解算法 数独求解算法的基本思路是使用回溯法,从左到右、从上到下依次填入数字如果填入的数字与已有数字冲突,则回溯到上一个…

    python 2023年5月14日
    00
  • Python开发常用的一些开源Package分享

    下面给你详细讲解“Python开发常用的一些开源Package分享”的完整实例教程。 介绍 Python是一种强大的编程语言,它支持丰富的第三方开源包,使得我们能够快速、高效的开发各种应用程序。本文将介绍一些常用的Python开源包,并给出一些简单的示例代码。 常用的Python开源包 以下是一些常用的Python开源包: requests:用于发送HTTP…

    python 2023年5月13日
    00
  • 用python写个自动SSH登录远程服务器的小工具(实例)

    以下是用Python写一个自动SSH登录远程服务器的小工具完整攻略: 什么是SSH登录 SSH(Secure Shell)是一种加密协议,通过 SSH 协议,我们可以在本地与远程服务器之间建立加密的网络连接,以此来保证在网络不安全的情况下进行安全的通信、文件传输和命令执行等操作。 如何使用Python实现SSH登录 借助 Python 的 paramiko …

    python 2023年5月19日
    00
  • Python自动化办公之图片转PDF的实现

    下面我会详细讲解如何实现“Python自动化办公之图片转PDF”的功能。 1. 安装必要的Python库 在使用Python进行图片转PDF操作前,需要预先安装Pillow和reportlab两个库,可以使用pip命令进行安装。 pip install Pillow reportlab 2. 编写Python代码 导入必要的Python库 from PIL …

    python 2023年6月5日
    00
  • python实现12306登录并保存cookie的方法示例

    Python实现12306登录并保存cookie的方法示例 12306是中国铁路客户服务中心的官方网站,提供火车票购买、查询、退改签等服务。本文将详细讲解如何使用Python实现12306登录并保存cookie的方法示例,包括如何发送HTTP请求、如何解析响应、如何保存cookie等。 发送HTTP请求 要实现12306登录,我们需要发送HTTP请求。以下是…

    python 2023年5月15日
    00
  • Python 格式化输出_String Formatting_控制小数点位数的实例详解

    Python格式化输出_StringFormatting_控制小数点位数的实例详解 在Python中,格式化输出是一种常用的技巧,可以用于将变量或表达式的值以特定的格式输出到控制台或文件中。本文将详细讲解Python格式化输出_StringFormatting_控制小数点位数的实例,包括使用字符串格式化符号、使用format方法、控制小数点位数等内容,并提供…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部