Opencv(图像处理)-基于Python-绘图功能

简介: Opencv(图像处理)-基于Python-绘图功能

1.介绍

OpenCV为开发者还提供了绘图功能,我们可以通过函数来实现在图片上作图。

2. line()

画线

cv2.line(img,开始点,结束点,颜色,线宽,线型,shift)

参数:img:在选中的图片上画;

开始点/结束点:开始坐标和结束坐标(x,y);

颜色:(b,g,r),作为元组输入,如果是灰度图像,直接填数字。

线宽:线或圆等的粗细。如果对闭合图形(如圆)传递-1 ,它将填充形状。默认厚度= 1

线型:线的类型,是否为8连接线,抗锯齿线等。默认情况下,为8连接线。cv.LINE_AA给出了抗锯齿的线条,看起来非常适合曲线

3.rectangle()

画矩形

cv2.rectangle(img,起始坐标,中止坐标,颜色,线宽,线型)

img:在选中的图片上画;

起始坐标,中止坐标:从左上角坐标开始,到右下角结束。

颜色:(b,g,r),作为元组输入,如果是灰度图像,直接填数字。

线宽:线或圆等的粗细。如果对闭合图形(如圆)传递-1 ,它将填充形状。默认厚度= 1

线型:线的类型,是否为8连接线,抗锯齿线等。默认情况下,为8连接线。cv.LINE_AA给出了抗锯齿的线条,看起来非常适合曲线。

4.circle()

画圆

cv2.circle(img,中心坐标,半径,颜色,线宽,线型)

img:在选中的图片上画;

中心坐标和半径:圆的中心坐标,半径。

颜色:(b,g,r),作为元组输入,如果是灰度图像,直接填数字。

线宽:线或圆等的粗细。如果对闭合图形(如圆)传递-1 ,它将填充形状。默认厚度= 1

线型:线的类型,是否为8连接线,抗锯齿线等。默认情况下,为8连接线。cv.LINE_AA给出了抗锯齿的线条,看起来非常适合曲线。

5. ellipse()

画椭圆

cv2.ellipse(img,中心位置,(长轴长,短轴长),angle,stratAngle,endAngle,颜色,线宽,线型)

img:在选中的图片上画;

中心位置:中心坐标

(长轴长,短轴长):元组的形式输入轴的长度。

angle:椭圆沿顺时针方向旋转的角度。

startAngle和endAngle:从主轴沿顺时针方向测量的椭圆弧的开始和结束。即给出0和360给出完整的椭圆。

6.polylines()

画多边形

cv2.polylines(img,点集,是否闭环,颜色)

img:在选中的图片上画;

点集:点的集合,如:[[10,5],[20,30],[70,20],[50,10]],并且点集的数据格式必须为np.int32

是否闭环:True\false

颜色:(b,g,r),作为元组输入,如果是灰度图像,直接填数字

7.fillPoly()

画实心的多边形

cv2.fillPoly(img,点集,颜色)

8. putText()

将文本放入图像中

cv2.putText(img,放入文字,起始坐标,font,字体大小,颜色,线宽,线型)

img:在选中的图片上画

放入文字:是一个字符串

起始坐标:放入位置的左下角坐标

font:文字类型,什么字体

字体大小:填数字

颜色:(b,g,r),作为元组输入,如果是灰度图像,直接填数字。

线宽:线或圆等的粗细。如果对闭合图形(如圆)传递-1 ,它将填充形状。默认厚度= 1

线型:线的类型,是否为8连接线,抗锯齿线等。默认情况下,为8连接线。cv2.LINE_AA给出了抗锯齿的线条,看起来非常适合曲线,也适合文字。

字体的标志:

代码示例

import cv2
import numpy as np
# 创建一个黑色图片
img = np.zeros((480, 640, 3), np.uint8)
# 画直线
cv2.line(img, (10, 10), (300, 300), (255, 255, 255))
# 画一个矩形,填上-1,是画实心矩形
cv2.rectangle(img, (10, 10), (100, 40),(255, 255, 0), -1)
# 画一个实心圆
cv2.circle(img, (200, 200), 60, (0, 255, 255), -1, cv2.LINE_AA)
# 画一个椭圆
cv2.ellipse(img, (300, 200), (50, 20), 30, 0, 180, (255, 255, 255), -1)
# 画一个多边形
# 列表的形式创建一个数组
# 将数组以列表的形式传进去
arr = np.array([[100, 100], [100, 200], [300, 20], [400, 100]], np.int32)
arr.reshape((-1, 1, 2))
cv2.polylines(img, [arr], False, (255, 255, 255))
# 填充多边形
cv2.fillPoly(img, [arr], (255, 0, 255))
# 加入字体
cv2.putText(img, "OpenCV", (50, 350), cv2.FONT_HERSHEY_SIMPLEX, 3, (255, 255, 255),lineType = cv2.LINE_AA)
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

9.用鼠标在图片上作图

"""
用鼠标在图片上直接作图
按住键盘L,拖动鼠标画直线
按住键盘r,拖动鼠标画矩形
按住键盘c,拖动鼠标画圆
"""
import cv2
import numpy as np
curshape = 0
startpos = [0, 0]
def mouse_callback(event, x, y, flags,userdata):
    global startpos, curshape
    if cv2.EVENT_LBUTTONDOWN == event: # 鼠标左键按下,获取起始坐标
        startpos = [x, y]
    elif event == cv2.EVENT_LBUTTONUP: # 鼠标左键抬起, 获得终点坐标
        if curshape == 0: # drawline
            cv2.line(img, startpos, (x, y), (255, 255, 255))
        elif curshape == 1: # drawrectangle
            cv2.rectangle(img, startpos, (x, y), (255, 255, 255))
        elif curshape == 2: # drawcircle
            a = (x - startpos[0])
            b = (y - startpos[1])
            r = int(((a**2)+(b**2))**0.5)  #结果要强转一下
            cv2.circle(img, startpos, r, (255, 255, 255))
# 创建窗口大小
cv2.namedWindow('drawing', cv2.WINDOW_NORMAL)
cv2.resizeWindow('drawing', 640, 480)
# 让该函数一直监听drawing界面,为了调用函数
cv2.setMouseCallback('drawing', mouse_callback)
# 创建全黑图片
img = np.zeros((480, 640, 3), np.uint8)
while True:
    cv2.imshow('drawing', img)
    key = cv2.waitKey(0)&0xff
    if key == ord('q'):
        print("退出成功")
        break
    elif key == ord('l'): # 线
        curshape = 0
    elif key == ord('r'): # 矩形
        curshape = 1
    elif key == ord('c'): # 圆
        curshape = 2
    else:
        print("输入错误,请重新输入")
cv2.destroyAllWindows()

鼠标的回调函数,一定要传五个参数!第五个参数可以随便用一个参数来占位!

目录
相关文章
|
1月前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
70 20
|
1月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
2月前
|
开发框架 数据建模 中间件
Python中的装饰器:简化代码,增强功能
在Python的世界里,装饰器是那些静悄悄的幕后英雄。它们不张扬,却能默默地为函数或类增添强大的功能。本文将带你了解装饰器的魅力所在,从基础概念到实际应用,我们一步步揭开装饰器的神秘面纱。准备好了吗?让我们开始这段简洁而富有启发性的旅程吧!
56 6
|
3月前
|
IDE 数据挖掘 开发工具
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
Python作为一种广受欢迎的高级编程语言,以其简洁的语法和强大的功能吸引了众多初学者和专业开发者
58 7
|
3月前
|
存储 缓存 测试技术
Python中的装饰器:功能增强与代码复用的利器
在Python编程中,装饰器是一种强大而灵活的工具,它允许开发者以简洁优雅的方式增强函数或方法的功能。本文将深入探讨装饰器的定义、工作原理、应用场景以及如何自定义装饰器。通过实例演示,我们将展示装饰器如何在不修改原有代码的基础上添加新的行为,从而提高代码的可读性、可维护性和复用性。此外,我们还将讨论装饰器在实际应用中的一些最佳实践和潜在陷阱。
|
2天前
|
人工智能 搜索推荐 测试技术
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
通义灵码 2.0 智能编码功能评测:Deepseek 加持下的 Python 开发体验
39 10
|
26天前
|
XML 机器学习/深度学习 人工智能
使用 OpenCV 和 Python 轻松实现人脸检测
本文介绍如何使用OpenCV和Python实现人脸检测。首先,确保安装了OpenCV库并加载预训练的Haar特征模型。接着,通过读取图像或视频帧,将其转换为灰度图并使用`detectMultiScale`方法进行人脸检测。检测到的人脸用矩形框标出并显示。优化方法包括调整参数、多尺度检测及使用更先进模型。人脸检测是计算机视觉的基础技术,具有广泛应用前景。
60 10
|
1月前
|
机器学习/深度学习 算法 数据可视化
Python的计算机视觉与图像处理
本文介绍了Python在计算机视觉和图像处理领域的应用,涵盖核心概念、算法原理、最佳实践及应用场景。重点讲解了OpenCV、NumPy、Pillow和Matplotlib等工具的使用,并通过代码实例展示了图像读写、处理和可视化的方法。实际应用包括自动驾驶、人脸识别、物体检测等。未来趋势涉及深度学习、边缘计算和量子计算,同时也讨论了数据不足、模型解释性和计算资源等挑战。
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
85 8
|
2月前
|
测试技术 Python
探索Python中的装饰器:简化代码,增强功能
在Python的世界中,装饰器是那些能够为我们的代码增添魔力的小精灵。它们不仅让代码看起来更加优雅,还能在不改变原有函数定义的情况下,增加额外的功能。本文将通过生动的例子和易于理解的语言,带你领略装饰器的奥秘,从基础概念到实际应用,一起开启Python装饰器的奇妙旅程。
56 11

热门文章

最新文章