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

OpenCV(十五):绘制矩形和圆

绘制矩形

矩形绘制是通过遍历所有介于 pt1pt2 坐标范围内的像素点,并根据 thickness 参数来决定是只修改边界像素(thickness > 0)还是修改所有内部像素(thickness = -1)。

cv2.rectangle(img, pt1, pt2, color, thickness, lineType)

参数解析:

参数名类型详细说明关键点
imgnumpy.ndarray目标图像(画布)。绘图操作是直接修改此数组。
pt1tuple矩形左上角的坐标 (x, y)定义矩形起始点。
pt2tuple矩形右下角的坐标 (x, y)定义矩形结束点。
colortuple矩形的颜色,使用 BGR 格式。e.g., 纯红色是 (0, 0, 255)
thicknessint边框线条的像素粗细。设为 -1cv2.FILLED 表示填充整个矩形。
lineTypeint线条类型,默认 cv2.LINE_8推荐使用 cv2.LINE_AA(抗锯齿)。

绘制圆形

圆形绘制基于圆的标准方程。函数会计算所有到圆心距离等于半径的像素点,并根据 thickness 确定要修改的像素范围。

cv2.circle(img, center, radius, color, thickness, lineType)

参数解析:

参数名类型详细说明关键点
imgnumpy.ndarray目标图像(画布)。
centertuple圆形的圆心坐标 (x, y)
radiusint圆形的半径像素值。决定圆形的大小。
colortuple圆形的颜色,使用 BGR 格式。
thicknessint圆形边框的像素粗细。设为 -1cv2.FILLED 表示填充整个圆形。
lineTypeint线条类型,默认 cv2.LINE_8推荐使用 cv2.LINE_AA(抗锯齿)。

抗锯齿与颜色

颜色格式 (BGR vs. RGB)

OpenCV-Python 在读取图像时,默认的通道顺序是 B (Blue), G (Green), R (Red)。因此,当我们想要定义颜色时,必须使用 BGR 格式的元组:

  • 纯蓝: (255, 0, 0)
  • 纯绿: (0, 255, 0)
  • 纯红: (0, 0, 255)
  • 纯白: (255, 255, 255)
  • 纯黑: (0, 0, 0)

抗锯齿 (Anti-Aliasing)

当线条或曲线以较小的角度绘制时,容易出现阶梯状的边缘,这被称为“锯齿效应” (Aliasing)。

  • cv2.LINE_8 (默认): 普通连接,会产生锯齿。
  • cv2.LINE_AA (Anti-Aliasing): 使用抗锯齿算法,通过平滑边界像素的颜色过渡来消除锯齿,使边缘看起来更平滑、自然。在要求高质量显示的场景中强烈推荐使用。

示例

import cv2
import numpy as np# --- 1. 准备画布 ---
H, W = 600, 800
img = np.zeros((H, W, 3), dtype=np.uint8)
# 背景设为中灰色
img[:, :] = (100, 100, 100) # --- 2. 绘制矩形 (cv2.rectangle) ---# 2.1 绘制红色粗边框矩形
pt1_r = (50, 50)
pt2_r = (250, 200)
color_r = (0, 0, 255) # 红色 (BGR)
cv2.rectangle(img, pt1_r, pt2_r, color_r, thickness=6, lineType=cv2.LINE_AA)
# 在矩形旁标注文字
cv2.putText(img, "Red Outline (AA)", (50, 230), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color_r, 2)# 2.2 绘制绿色填充矩形 (模拟标注框)
pt1_g = (300, 300)
pt2_g = (600, 500)
color_g = (0, 255, 0) # 绿色 (BGR)
cv2.rectangle(img, pt1_g, pt2_g, color_g, thickness=-1)
cv2.putText(img, "Green Filled", (300, 530), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color_g, 2)# --- 3. 绘制圆形 (cv2.circle) ---# 3.1 绘制黄色抗锯齿圆形边框
center_y = (700, 100)
radius_y = 70
color_y = (0, 255, 255) # 黄色 (BGR)
cv2.circle(img, center_y, radius_y, color_y, thickness=4, lineType=cv2.LINE_AA)
cv2.putText(img, "Yellow Circle (AA)", (620, 200), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color_y, 2)# 3.2 绘制品红色填充圆形 (无抗锯齿,对比效果)
center_m = (150, 450)
radius_m = 90
color_m = (255, 0, 255) # 品红色 (BGR)
cv2.circle(img, center_m, radius_m, color_m, thickness=-1, lineType=cv2.LINE_8)
cv2.putText(img, "Magenta Filled", (80, 570), cv2.FONT_HERSHEY_SIMPLEX, 0.7, color_m, 2)# --- 4. 显示结果 ---
cv2.imshow("OpenCV Drawing Primitives (Rectangle & Circle)", img)
# 等待按键,0表示永远等待
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()# 可以选择保存结果
# cv2.imwrite("opencv_drawing_example.png", img)
http://www.dtcms.com/a/545550.html

相关文章:

  • 网站建设基本流程视频关于动漫制作专业
  • 【React】节流会在react内失效??
  • ARM SMMU v3架构规范中文版
  • 北京58网站建设云南手工活外发加工网
  • 宁波本地模板网站建设平台百度论坛首页官网
  • 小模型是AI Agent的未来
  • Flink DataStream「上下文与状态处理」实战指南
  • MLP(Multilayer Perceptron,多层感知机)怎么解决异或问题
  • 惠普DL380服务器安装系统以后无法读取到系统盘启动解决方案(其他品牌服务器类似解决思路)
  • 做个网站的价格长荣建设深圳公司网站
  • 公司要做个网站吗成都短视频运营
  • Linux C/C++ 学习日记(37):协程(六):总结
  • NVIDIA Jetson Orin NX安装graspnet失败解决方案
  • 网站后台有些不显示自己怎么做外贸网站
  • 有几个网站可以做代发的制作小诗集
  • 迷你电脑主机哪个牌子好?有哪些源头OEM/ODM定制厂商
  • 微信小程序开发案例 | 通讯录小程序(下)
  • 大模型算法面试笔记——多头潜在注意力(MLA)
  • 常州城投建设工程招标有限公司网站泰安网站建设策划方案
  • 南通公司网站建设湖南网站优化公司
  • 做图标的网站广州海珠发布
  • 2022/12 JLPT听力原文 问题四
  • openEuler安装mysql8,流程详细
  • 【Linux】库制作与原理 从生成使用到 ELF 文件与链接原理解析
  • 【开题答辩全过程】以 儿童疫苗接种提醒系统的设计与实现为例,包含答辩的问题和答案
  • 【linux】基础开发工具(2)vim
  • 宁波找网站建设企业如何使用网络营销策略
  • 关于进一步做好网络安全等级保护有关工作的问题释疑-【二级以上系统重新备案】、【备案证明有效期三年】
  • Flink Keyed State 详解之三
  • LangChain4j学习3:模型参数