当前位置: 首页 > news >正文

OpenCV —— 绘制图形

在这里插入图片描述
在这里插入图片描述

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️
💥个人主页:🔥🔥🔥大魔王🔥🔥🔥
💥所属专栏:🔥魔王的修炼之路–Computer vision🔥
如果你觉得这篇文章对你有帮助,请在文章结尾处留下你的点赞👍和关注💖,支持一下博主。同时记得收藏✨这篇文章,方便以后重新阅读。

文章目录

  • 绘制图形
  • 鼠标画图

绘制图形

import cv2
import numpy as npcv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.resizeWindow("img", 640, 480)img = np.zeros((480, 640, 3), np.uint8)
print(img.shape)# 绘制图形
# 线宽:默认 1,负数表示填充
# 注意顺序,(x,y),这里是 长 和 高!# 绘制线段
# 参数:目标图像,起始点,结束点,颜色,线宽(线没有填充,不能为 -1),线型
# 最后参数:线型,只有 line() 和 putText() 有这个参数,值为(4,8(默认),16(抗锯齿,平滑))。
cv2.line(img, (10, 200), (200, 200), (0, 0, 255), 10, 4) 
cv2.line(img, (10, 300), (200, 300), (0, 0, 255), 10, 16) # 绘制矩形
# 参数:目标图像,左上角坐标,右下角坐标,颜色,线宽
cv2.rectangle(img, (20, 10), (100, 150), (0, 0, 255), -1)
cv2.rectangle(img, (300, 150), (500, 250), (0, 0, 255), 1)# 绘制圆形
# 参数:目标图像,圆心,半径,颜色, 线宽
cv2.circle(img, (300, 300), 50, (0, 255, 0), 2)# 绘制椭圆
# 参数:目标图像,中心点,长短轴一半,椭圆旋转角度,从椭圆的多少角度开始,到多少角度结束,颜色,线宽
# 这里说的角度都是顺时针的
cv2.ellipse(img, (400, 200), (100, 50), 45, 45, 90, (0, 255, 0), 1)# 绘制多边形:多边形填充需要专门的函数
# 参数:目标图像,顶点列表(NumPy 数组格式),是否封闭路径(首尾相连),颜色,线宽# 创建顶点列表
# np.array() 创建的数组原理:把给定的数据转换成一个多维数组。
pts = np.array([(300, 10), (150,100), (450, 100)], np.int32) # 数据类型必须为 32位 有符号整型
# 有些函数接收的时候比较严格,需要调用 pts.reshape(-1, 1, 2),改变数组形状(维度,方便函数调用)# 绘制多边形
cv2.polylines(img, [pts], True, (0, 0, 255), 2) # 不能为 -1,填充需要专门的函数,单独写就行
# 第二个参数,需要一个点集列表,也就是可以同时绘制多个多边形,即使只绘制一个,也是列表,需要加上中括号 []# 填充多边形:单独写就行, 不需要提前绘制
# cv2.fillPoly(img, [pts], (0, 0, 255))
# 第二个参数,需要一个点集列表,也就是可以同时绘制多个多边形,即使只绘制一个,也是列表,需要加上中括号 []# 绘制文本:目标图像,要显示文字,文字左下角坐标,字体类型,字号,颜色,线宽,线型
cv2.putText(img, "hahahhaha", (200, 200), cv2.FONT_HERSHEY_PLAIN, 3, (255, 255, 255))cv2.imshow("img", img)key = cv2.waitKey(0)cv2.destroyAllWindows()

鼠标画图

import cv2
import numpy as npcurshape = 0 # 记录输入的字符,用来判断调用回调函数时绘制什么图形
startpos = (0, 0) # 鼠标按下时的位置img = np.zeros((480, 640, 3), np.uint8)# 鼠标回调函数:第一个参数为鼠标事件,后面俩是鼠标当前坐标
def mouse_callback(event, x, y, flags, userdata): global curshape, startposif (event == cv2.EVENT_LBUTTONDOWN):startpos = (x, y)elif(event == cv2.EVENT_LBUTTONUP):if curshape == 0:cv2.line(img, startpos, (x, y), (0, 0, 255))elif curshape == 1:cv2.rectangle(img, startpos, (x, y), (0, 0, 255))elif curshape == 2:x_tmp = x - startpos[0]y_tmp = y - startpos[1]r = int((x_tmp ** 2 + y_tmp ** 2) ** 0.5) # 半径必须为整型cv2.circle(img, startpos, r, (0, 0, 255))else:print("error: no shape!")cv2.namedWindow("win", cv2.WINDOW_NORMAL)# 设置鼠标回调:是一种注册机制,以后只要这个窗口里鼠标有任何事件(移动、点击、释放等),我就调用你这个 mouse_callback 函数,并把事件类型、鼠标坐标等参数传进去。
cv2.setMouseCallback("win", mouse_callback)while True:cv2.imshow("win", img)key = (cv2.waitKey(10) & 0xff) # 返回输入字符的 ASCIIif key == ord('q'): # 记得将 字符串 转为ASCII(整型)breakelif key == ord('a'):curshape = 0elif key == ord('s'):curshape = 1elif key == ord('d'):curshape = 2cv2.destroyAllWindows()
  • 博主长期更新,博主的目标是不断提升阅读体验和内容质量,如果你喜欢博主的文章,请点个赞或者关注博主支持一波,我会更加努力的为你呈现精彩的内容。

🌈专栏推荐
😈魔王的修炼之路–C语言
😈魔王的修炼之路–数据结构
😈魔王的修炼之路–C++
😈魔王的修炼之路–QT
😈魔王的修炼之路–算法
😈魔王的修炼之路–力扣
😈魔王的修炼之路–牛客
😈魔王的修炼之路–剑指offer
😈魔王的修炼之路–Linux
😈魔王的修炼之路–Computer vision
更新不易,希望得到友友的三连支持一波。收藏这篇文章,意味着你将永久拥有它,无论何时何地,都可以立即找到重新阅读;关注博主,意味着无论何时何地,博主将永久和你一起学习进步,为你带来有价值的内容。

请添加图片描述

http://www.dtcms.com/a/296118.html

相关文章:

  • 实验研究 | VR虚拟现实环境中植物景观偏好与生理恢复性效益研究
  • linux端 RAGflow超详细小白教程(一)安装及环境搭建
  • Linux系统编程——网络
  • 河南萌新联赛2025第(二)场:河南农业大学(整除分块,二进制,树的搜索)
  • C++ explicit 上下文相关转换
  • 牛客多校04L :Ladder Challenge
  • 基于MASAC算法的建筑群需求响应系统设计与实现
  • 个人电脑 LLMOps 落地方案
  • pytest官方Tutorial所有示例详解(二)
  • 【AI】Java生态对接大语言模型:主流框架深度解析
  • FastAPI中间件
  • 如何在 conda 中删除环境
  • 常见半导体的介电常数
  • 告别下载中断:深入解析Tomcat JSP中的“远程主机强迫关闭连接”与“软件中止连接”
  • 理解传统部署下 Tomcat 核心组件与请求链路全流程
  • 详解力扣高频 SQL 50 题之584. 寻找用户推荐人【入门】
  • SpringBoot + Thymeleaf 实现模拟登录功能详解
  • SQL173 店铺901国庆期间的7日动销率和滞销率
  • 比例谐振控制器(PR控制器)在交流系统中的应用原理详细解析
  • Ubuntu安装jdk、上传jar包、运行java、配置域名、nginx接口映射、配置https域名
  • 一文读懂 HTTPS:证书体系与加密流程
  • HttpServletRequestWrapper存储Request
  • ORACLE DATABASE 23AI+Apex+ORDS -纯享版
  • 内网IM:BeeWorks私有化部署的安全通讯解决方案
  • 7.24路由协议总结
  • 使用Python采集招聘网站数据并智能分析求职信息
  • 11款Scrum看板软件评测:功能、价格、优缺点
  • 【News】同为科技亮相首届气象经济博览会
  • Ollama(5)服务接口压力测试
  • 【docker | 部署 】Jetson Orin与AMD平台容器化部署概述