【opencv学习】给图像加图形注释

本文详细介绍了如何使用OpenCV库在图像上绘制直线、空心圆、实心圆、矩形、椭圆以及添加文本。通过示例代码展示了各种图形的创建过程,是进行图像标注和展示的实用教程。

今天学习在图像上如何画出一些常见的图形,这将用于图像任务的标注和展示

import cv2


def cv_show_image(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)  # 等待时间,单位是毫秒,0代表任意键终止
    cv2.destroyAllWindows()


img = cv2.imread('images/build.jpeg')

# ======================================================
# 给图像加一条直线
# cv2.line函数:需要指定直线的俩端点,其他的就是颜色和粗细
imageLine = img.copy()
pointA = (200, 80)
pointB = (550, 180)
cv2.line(img=imageLine, pt1=pointA, pt2=pointB, color=(0, 0, 255), thickness=3, lineType=cv2.LINE_AA)
cv_show_image('imageLine', imageLine)
del imageLine

# ======================================================
# 给图像加一个空心圆圈
# cv2.circle函数:需要指定圆心和半径
imageCircle = img.copy()
circle_center = (315, 190)  # 定义圆心
radius = 100  # 定义圆的半径
# 这里画一个空心的圆
cv2.circle(imageCircle, circle_center, radius, (0, 0, 255), thickness=3, lineType=cv2.LINE_AA)
cv_show_image('imageCircle_empty', imageCircle)
del imageCircle

# ======================================================
# 给图像加一个实心圆圈
# cv2.circle函数:需要指定圆心和半径
imageCircle = img.copy()
circle_center = (300, 300)  # 定义圆心
radius = 100  # 定义圆的半径
# 这里画一个实心的填充了的圆,唯一的区别就是给 thickness 赋值成 -1
cv2.circle(imageCircle, circle_center, radius, (0, 0, 255), thickness=-1, lineType=cv2.LINE_AA)
cv_show_image('imageCircle_filled', imageCircle)
del imageCircle

# ======================================================
# 给图像加一个矩形
# cv2.rectangle函数:需要指定定义矩形的起点和终点,也就是左上角的点坐标和右下角的坐标
imageRectangle = img.copy()
# 定义左上角的点坐标和右下角的坐标
start_point = (300, 180)
end_point = (500, 230)
# 画矩形
cv2.rectangle(imageRectangle, start_point, end_point, (0, 0, 255), thickness=3, lineType=cv2.LINE_8)
cv_show_image('imageRectangle', imageRectangle)
del imageRectangle

# ======================================================
# 给图像加一个椭圆
# cv2.ellipse函数:需要指定圆心,(长轴和短轴),椭圆偏的角度,角度的开始和结束,
# 参数中 center是椭圆的圆心,angle是倾斜角度,startAngle和endAngle是起始/结束的角度,axes是定义了长轴和短轴长度
imageEllipse = img.copy()
# 定义椭圆的中心点
ellipse_center = (300, 200)
ellipse_center2 = (500, 200)
# 定义椭圆的长轴和短轴
axis1 = (130, 38)
axis2 = (156, 50)
# 绘制椭圆,全部的
# 水平的椭圆
cv2.ellipse(img=imageEllipse, center=ellipse_center,
            axes=axis1, angle=0, startAngle=0, endAngle=360,
            color=(255, 0, 0), thickness=3)
cv_show_image('imageEllipse', imageEllipse)
# 垂直的椭圆
cv2.ellipse(imageEllipse, ellipse_center, axis2, 90, 0, 360, (0, 0, 255), thickness=3)
cv_show_image('imageEllipse', imageEllipse)

# 绘制椭圆,部分的,只有部分角度才有
# 倾斜45度的,没有[270, 360]度的椭圆
cv2.ellipse(imageEllipse, ellipse_center2, axis1, 45, 0, 270, (255, 0, 0), thickness=3)
cv_show_image('imageEllipse', imageEllipse)
# 倾斜135度的,没有[0, 90]度的椭圆
cv2.ellipse(imageEllipse, ellipse_center2, axis2, 135, 90, 360, (0, 0, 255), thickness=3)
cv_show_image('imageEllipse', imageEllipse)
# 倾斜90度的(垂直),没有[180, 360]度的椭圆
cv2.ellipse(imageEllipse, ellipse_center2, axis2, 90, 0, 180, (0, 255, 0), thickness=3)
cv_show_image('imageEllipse', imageEllipse)
# 倾斜0度的(水平),没有[0, 180]度的椭圆
cv2.ellipse(imageEllipse, ellipse_center2, axis2, 0, 180, 360, (0, 255, 0), thickness=3)
cv_show_image('imageEllipse', imageEllipse)
del imageEllipse

# ======================================================
# 给图像加一段文字
# cv2.putText函数:需要指定文本,文本位置。fontscale是字体比例用于向上或向下缩放字体的基本大小,是个浮点值
imageText = img.copy()
# 让我们写下你想要放在图像上的文本
text = 'This is my house?'
# 你想放文本的地方,这就是文本放置的位置信息
org = (150, 250)
# 将文本写在输入图像上
cv2.putText(img=imageText, text=text, org=org,
            fontFace=cv2.FONT_HERSHEY_COMPLEX, fontScale=1.5, color=(0, 255, 0), thickness=3)
cv_show_image('imageText', imageText)
del imageText


效果如下:
画出直线:
请添加图片描述
画出空心圆和实心圆
请添加图片描述
请添加图片描述
画出一个矩形
请添加图片描述
画出各种椭圆
请添加图片描述
画出文本
请添加图片描述

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值