Python OpenCV学习之图形绘制总结

 更新时间:2022年01月06日 08:51:14   作者:一个热爱学习的深度渣渣  
在图像的任务中,不管是图像检测还是图像识别,我们都需要通过绘制图形和绘制文字对处理的结果进行说明,本篇就详细介绍下OpenCV中的图形的绘制,感兴趣的可以了解一下

背景

使用OpenCV进行图形绘制是一种必备的技能,在图像的任务中,不管是图像检测还是图像识别,我们都需要通过绘制图形和绘制文字对处理的结果进行说明,本篇就详细介绍下图形的绘制;

一、画线

line(图像,起始点,终点,颜色,线宽,线形):一般只需要前面四个参数即可;

代码案例:

cv2.line(img, (20, 100), (20, 500), (0,0,255))

画出了一条Y方向上的红色线段;

二、画矩形

这个相对来说是应用最多的一种方法了,往往在检测项目中返回目标的结果就是(x,y,w,h)或者(x1,y1,x2,y2)这两种形式,当然我们这里绘制需要的是第二种形式,而通过左上角点计算右下角也是很简单的;

cv2.rectangle(img, (x1,y1), (x2,y2), (0,0,255), 3)    # 后面两个参数为颜色和线长

简单展示一下我用DeepFashion数据画出矩形框的效果:

三、画圆

画圆在应用的其实并不多,更多的是画点的操作,例如关键点的任务,需要将关键点在目标图像上显示出来;而实际上点就是一个实心圆,这里就介绍画圆和画点的两种形式吧。

# 函数
cv2.circle(img, (x,y), 半径长度, (0,0,255), -1)        // 画一个实心圆(点),最后参数设置为负数
cv2.circle(img, (x,y), 半径长度, (0,0,255), 4)        // 画一个空心圆

下面还是展示我画出关键点的一个效果:

四、画多边形

绘制多边形在实际应用中也很常见,例如分割以及OCR的任务,往往需要用多个点描述出目标的轮廓。

函数原型如下:

polylines(img,点集,是否闭环,颜色…),注意这里的点集必须是32位的

案例代码:

pot = np.array([(100, 100), (200, 200), (300, 400)], np.int32)
cv2.polylines(img, [pot], True, (0, 0, 255))
# 如果输出填充的多边形,用以下api
cv2.fillPoly(img, [pot], (0, 0, 255))

五、画文本

绘制文本在实际项目中,往往用来标记类别,对于一些结果输出,可以通过文本的方式绘制到图像上,便于观察结果和验证;

函数原型:

putText(img,字符串,起始点,字体,字号…)

案例代码:

cv2.putText(img, "Hello World", (100, 100), 字体, 3, (0,0,255))

六、鼠标绘制

实现功能:

可通过鼠标进行基本图形的绘制:按下l画线,按下r画矩形,按下c画圆;

import cv2
import numpy as np

star = (0, 0)
select = 0
img = np.zeros((480, 640, 3), np.uint8)

// 定义鼠标回调函数
def mouse_callback(event, x, y, flags, userdata):
    global star,select
    if (event & cv2.EVENT_LBUTTONDOWN == cv2.EVENT_LBUTTONDOWN):
        star = (x, y)
    elif (event & cv2.EVENT_LBUTTONUP == cv2.EVENT_LBUTTONUP):
        if select == 0:
            cv2.line(img, star, (x, y), (0, 0, 255))
        elif select == 1:
            cv2.rectangle(img, star, (x, y), (0, 0, 255))
        elif select == 2:
            a = (x - star[0])
            b = (y - star[1])
            r = int((a**2+b**2)**0.5)
            cv2.circle(img, star, r, (0, 0, 255))
        else:
            print('no shape')
            
cv2.namedWindow('drawshape', cv2.WINDOW_NORMAL)
cv2.setMouseCallback('drawshape', mouse_callback, "111")
while True:
    cv2.imshow('drawshape', img)
    key=cv2.waitKey(1) & 0xFF
    if key == ord('q'):
        break
    elif key == ord('l'):
        select = 0
    elif key == ord('r'):
        select = 1
    elif key == ord('c'):
        select = 2

下图是我自己随意画的结果,大家可以创造出更有趣的图画;

总结

常用的图形绘制就是上面的几种,其中中文文本还存在问题(需要引入字体样式文件),在后续会进行补充;之后将学习图形学的一些进阶知识,也是为后续实战做准备;

到此这篇关于Python OpenCV学习之图形绘制详解的文章就介绍到这了,更多相关Python OpenCV图形绘制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现图片转字符画

    python实现图片转字符画

    这篇文章主要为大家详细介绍了python实现图片转字符画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • Python利用临时文件实现数据的保存

    Python利用临时文件实现数据的保存

    tempfile模块专门用于创建临时文件和临时目录,它既可以在 UNIX 平台上运行良好,也可以在 Windows 平台上运行良好。本文将利用tempfile模块创建临时文件来保存数据,感兴趣的可以了解一下
    2022-07-07
  • Python实现统计文本中字符的方法小结

    Python实现统计文本中字符的方法小结

    在计算机编程中,经常需要对文本数据进行处理和分析,字符统计是其中一个常见任务,本文将详细介绍如何使用Python进行字符统计,希望对大家有所帮助
    2024-01-01
  • Python flask使用ajax上传文件的示例代码

    Python flask使用ajax上传文件的示例代码

    这篇文章主要介绍了Python flask使用ajax上传文件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • pandas统计重复值次数的方法实现

    pandas统计重复值次数的方法实现

    这篇文章主要介绍了pandas统计重复值次数的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • python实战练习做一个随机点名的程序

    python实战练习做一个随机点名的程序

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Python实现一个随机点名的程序,大家可以在过程中查缺补漏,提升水平
    2021-10-10
  • WxPython建立批量录入框窗口

    WxPython建立批量录入框窗口

    这篇文章主要为大家详细介绍了WxPython建立批量录入框窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • python使用句柄控制windows窗口的两种方法

    python使用句柄控制windows窗口的两种方法

    本文主要介绍了python使用句柄控制windows窗口的两种方法,实现窗口的最小化,还原,最大化,关闭操作,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • django实现图片上传数据库并显示

    django实现图片上传数据库并显示

    这篇文章主要为大家详细介绍了django实现图片上传数据库并显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Scrapy实现模拟登录的示例代码

    Scrapy实现模拟登录的示例代码

    这篇文章主要介绍了Scrapy实现模拟登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02

最新评论