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

news/2024/11/15 2:26:36/

在这里插入图片描述

  • 1.介绍
  • 2. line()
  • 3.rectangle()
  • 4.circle()
  • 5. ellipse()
  • 6.polylines()
  • 7.fillPoly()
  • 8. putText()
  • 代码示例
  • 9.用鼠标在图片上作图

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 npcurshape = 0
startpos = [0, 0]def mouse_callback(event, x, y, flags,userdata):global startpos, curshapeif cv2.EVENT_LBUTTONDOWN == event: # 鼠标左键按下,获取起始坐标startpos = [x, y]elif event == cv2.EVENT_LBUTTONUP: # 鼠标左键抬起, 获得终点坐标if curshape == 0: # drawlinecv2.line(img, startpos, (x, y), (255, 255, 255))elif curshape == 1: # drawrectanglecv2.rectangle(img, startpos, (x, y), (255, 255, 255))elif curshape == 2: # drawcirclea = (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)&0xffif key == ord('q'):print("退出成功")breakelif key == ord('l'): # 线curshape = 0elif key == ord('r'): # 矩形curshape = 1elif key == ord('c'): # 圆curshape = 2else:print("输入错误,请重新输入")cv2.destroyAllWindows()

在这里插入图片描述

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


http://www.ppmy.cn/news/98298.html

相关文章

Python教程:如何用Python编写FOFA爬虫获取信息?

部分数据来源:ChatGPT 前言 在网络安全领域,信息收集是非常重要的一环。而网上许多公开的信息都是通过搜索引擎、在线查询等方式获取的。其中,FOFA 是一个非常优秀的互联网数据搜索引擎,可以通过搜索特定的关键字来快速获取相关的数据。 虽然 FOFA 有很多强大的搜索功能,…

ICV报告: ADAS SoC市场规模将在2024年迎来较大突破

随着先进驾驶辅助系统(ADAS)的出现和对于自动驾驶的追求,汽车行业正在经历快速转型。这些技术进步的核心是ADAS SoC,它是实现多个功能集成于单一平台的关键组件。ADAS SoC已经成为智能汽车的重要驱动因素,彻底改变了安…

使用TensorFlow构建,绘制和解释人工神经网络

使用 Python 进行深度学习:神经网络(完整教程) 使用TensorFlow构建,绘制和解释人工神经网络 总结 在本文中,我将展示如何使用Python构建神经网络,以及如何使用可视化和创建模型预测解释器向业务解释深度学习…

ZKP加速 GPU/FPGA/ASIC

1. 引言 参考资料有: [1] Figment Capital团队2023年4月博客 Accelerating Zero-Knowledge Proofs [2] Ulvetanna团队2023年5月博客 Poseidon Merkle Trees in Hardware [3] supranational2023年1月博客 Open VDF: Accelerating the Nova SNARK-based VDF 【采用AS…

智能工厂 | 联合汽车电子有限公司汽车驱动科技上海智能工厂

智能制造是我国加快建设制造强国的主攻方向,是上海城市数字化转型的重要抓手。智能工厂是推动智能制造的切入点和突破口,是制造业数字化转型的重要载体,以智能工厂为载体布局新赛道、触发新动能、带动新终端,从而实现制造业高质量…

Git进阶之代码回滚、合并代码、从A分支选择N次提交,合并到B分支【revert、merge、rebase、cherry-pick】

B站视频地址: https://www.bilibili.com/video/BV1KX4y1a7N9 Git学习文档:https://d9bp4nr5ye.feishu.cn/wiki/PeDPw3mm3iFA36k9td9cVeignsZ 在很长一段时间里,我对Git的操作只限于:提交代码,拉取代码,合…

vue3项目创建步骤,以及项目运行失败的原因和解决方法

vue3项目创建步骤,以及项目运行失败的原因和解决方法 vue3项目创建前提:搭建node.js环境第一步:创建一个空文件夹第二步:打开空文件夹,如图所示第三步:在此输入cmd,并按下回车键,进入…

测试老鸟总结,性能测试三大核心指标详解,并发/TPS/响应时间...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 抛出问题&#xf…