Python OpenCV学习之图形绘制总结

yizhihongxing

Python OpenCV学习之图形绘制总结

OpenCV是一个非常强大的计算机视觉库,能够用于各种图像处理任务。在OpenCV中,图形绘制是非常基础的一部分,下面是Python OpenCV图形绘制的总结。

1. 图形绘制函数

OpenCV提供了多种基本的图形绘制函数,包括直线、矩形、圆、多边形等。这些函数都属于cv2模块,下面是一些常用图形绘制函数的代码示例:

1.1 绘制直线

import numpy as np
import cv2

# 创建一个黑色图像
img = np.zeros((512, 512, 3), np.uint8)

# 画一条红色直线,起点为(0,0),终点为(511,511),线宽为5
cv2.line(img, (0,0), (511,511), (0,0,255), 5)

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.2 绘制矩形

import numpy as np
import cv2

# 创建一个黑色图像
img = np.zeros((512, 512, 3), np.uint8)

# 画一个绿色矩形,左上角坐标为(50,50),右下角坐标为(200,200),线宽为3
cv2.rectangle(img,(50,50),(200,200),(0,255,0),3)

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

1.3 绘制圆

import numpy as np
import cv2

# 创建一个黑色图像
img = np.zeros((512, 512, 3), np.uint8)

# 画一个黄色圆,圆心坐标为(256,256),半径为100,线宽为-1(表示填充)
cv2.circle(img,(256,256), 100, (0,255,255), -1)

# 显示图像
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. 从鼠标事件中获取绘图坐标

有时候需要从鼠标事件中获取用户绘图的坐标,以完成动态绘制的效果。下面是一段代码示例,从鼠标事件中获取坐标,并在图像上进行动态绘制:

import numpy as np
import cv2

# 定义回调函数,从事件中获取坐标并进行绘制
def draw_circle(event,x,y,flags,param):
    if event == cv2.EVENT_LBUTTONUP:
        cv2.circle(img,(x,y),50,(255,0,0),-1)

# 创建一个黑色图像
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')

# 注册回调函数
cv2.setMouseCallback('image',draw_circle)

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

该代码创建了一个黑色图像,并注册了鼠标左键的点击事件。当用户点击鼠标左键时,回调函数将获取到坐标信息并进行绘制,实现了动态绘图的效果。

3. 总结

本文介绍了Python OpenCV图形绘制的基本函数和从鼠标事件中获取绘制坐标的方法。在实际开发中,可以根据需求灵活使用这些函数和方法,完成各种图形绘制任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python OpenCV学习之图形绘制总结 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Python中在for循环中嵌套使用if和else语句的技巧

    Python中的for循环结构可以嵌套if和else语句,这使得代码的灵活性增加了不少。在这里,我们将为大家详细讲解如何在Python中嵌套使用if和else语句。 为什么使用for循环中嵌套if和else语句 在处理数据集等需要遍历的数据结构时,经常需要在循环内使用if和else结构来筛选符合条件的数据。嵌套使用if和else语句可以进一步判断符合条件的数…

    人工智能概论 2023年5月25日
    00
  • MongoDB单表数据的导出和恢复实例讲解

    下面我将详细讲解“MongoDB单表数据的导出和恢复实例讲解”的完整攻略,过程中包含两条示例说明。 一、MongoDB单表数据的导出 1.1 通过mongoexport命令导出数据 在MongoDB中,我们可以通过使用mongoexport命令将数据导出到一个文件中。其基本语法如下: mongoexport -d dbname -c collectionna…

    人工智能概览 2023年5月25日
    00
  • 安装Ubuntu20.04与安装NVIDIA驱动的教程

    下面是安装Ubuntu 20.04和安装NVIDIA驱动的教程。 安装Ubuntu 20.04 下载Ubuntu 20.04的镜像 在官网上下载Ubuntu 20.04的镜像文件,可以是Desktop或Server版本。下载地址:https://ubuntu.com/download 制作U盘启动盘 使用制作启动盘工具将Ubuntu 20.04镜像写入U盘中…

    人工智能概览 2023年5月25日
    00
  • Django框架的中的setting.py文件说明详解

    Django框架的settings.py文件是Django应用程序配置的核心文件之一。在该文件中,您可以设置各种设置,例如数据库连接、静态文件路径、中间件等等。 以下是对settings.py文件的详细说明: 应用程序配置 DEBUG: 此选项是用于在开发过程中启用或禁用调试模式。如果将其设置为True,则会显示有关代码错误的详细信息。在生产环境中,它应该始…

    人工智能概览 2023年5月25日
    00
  • Java进程间通信之消息队列

    接下来我将详细讲解Java进程间通信之消息队列的完整攻略。 什么是消息队列 消息队列是一种通过在应用程序之间异步地传输数据来解决耦合问题的技术。它允许发送者,通常是独立的应用程序,将消息发送到队列中而不需要实时处理它。相反,接收者从队列中接收消息并在合适的时候进行处理。 消息队列的作用 使用消息队列可以将应用程序之间的通信和解耦,提高了系统的可靠性、可扩展性…

    人工智能概览 2023年5月25日
    00
  • 如何利用Python+Vue实现简单的前后端分离

    如何利用Python+Vue实现简单的前后端分离? 这里简单介绍一下Python与Vue的前后端分离架构,步骤分为后端部分(Python)和前端部分(Vue)。 后端部分(Python) 准备工作 在搭建Python的Web框架时,我们需要安装Python的web框架这里我们以Flask为例。如果没有安装,我们可以在控制台输入以下命令进行安装: pip in…

    人工智能概论 2023年5月25日
    00
  • 安装ubuntu18.04报:failed to load ldlinux.c32的问题及解决步骤

    安装Ubuntu 18.04的过程中,有些用户会遇到“failed to load ldlinux.c32”的问题,这会导致无法进入系统安装程序。下面是一个完整的解决步骤: 问题描述 在安装Ubuntu 18.04过程中,启动U盘后出现以下报错: failed to load ldlinux.c32 解决步骤 验证U盘的完整性 首先,我们需要验证U盘上的IS…

    人工智能概览 2023年5月25日
    00
  • Python简易版停车管理系统

    下面我详细讲解“Python简易版停车管理系统”的完整攻略。 简介 停车管理系统是一个基于Python编写的简单项目,它模拟了一个停车场中的车辆停放、取车的过程。系统通过车位号来进行管理,用户可以查询空余车位、停车、取车等操作。 技术栈 Python3 文件读写 功能说明 实现的功能如下: 查询空余车位 停车 取车 退出系统 项目实现 1. 创建停车场 我们…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部