【opencv+图像处理】Image Processing in OpenCV 1-2基本图形绘制

🍉 博主微信 cvxiayixiao
🍓 【Segment Anything Model】计算机视觉检测分割任务专栏。 链接
🍑 【公开数据集预处理】特别是医疗公开数据集的接受和预处理,提供代码讲解。链接
🍈 【opencv+图像处理】opencv代码库讲解,结合图像处理知识,不仅仅是调库。链接

本专栏代码地址https://github.com/xiawei20161308104/xv_opencv_tutorials

1.本节涉及的opencv新函数

 🚩cv.line(), 
 🚩cv.circle() , 
 🚩cv.rectangle(), 
 🚩cv.ellipse(), 
 🚩cv.putText() 

2.opencv cv.line()绘制直线

cv.line()函数用于绘制图像,首先有一个底图,在底图之上绘制直线,(0,0)为起始点,(511,511)为终止点,5为线宽
imshow()函数用于显示图像,第一个参数是窗口的名称,第二个参数是要显示的图像。
waitKey(0)函数用于等待用户按下任意键关闭图像窗口。
destroyAllWindows()函数用于关闭所有打开的窗口

代码

import numpy as np
import cv2 as cv
# 创建一个黑色图像
img = np.zeros((512,512,3), np.uint8)
# 在图像上绘制一条蓝色的对角线,线宽为5像素
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

3.opencv cv.circle()绘制圆形

在上图基础上绘制一个半径为100的圆,圆心为(256, 256),颜色为红色,线宽为2

代码

第一个参数是图像。
第二个参数是圆心的坐标 (x, y)。
第三个参数是圆的半径。
第四个参数是颜色,以 (B, G, R) 的形式指定。
第五个参数是线宽,如果为负数,则表示填充整个圆

cv.circle(img, (256, 256), 100, (0, 0, 255), 2)

效果

在这里插入图片描述

3.opencv cv.circle()绘制实心圆

在cv.circle()函数中将线宽参数(thickness)设置为负值

代码

# 绘制一个填充的圆,半径为100,圆心在(256, 256),颜色为蓝色
cv.circle(img, (256, 256), 100, (255, 0, 0), -1)

线宽参数(thickness)设置为-1,表示绘制填充的圆。 圆的半径为100,圆心位于(256, 256),填充颜色为蓝色((255,0, 0))。

效果

在这里插入图片描述

4.opencv cv.circle()图像上绘制多个圆

多次调用cv.circle()函数,并为每个圆指定不同的参数

代码

# 绘制多个实心圆与空心圆
import numpy as np
import cv2 as cv
# 创建一个黑色图像
img = np.zeros((512,512,3), np.uint8)
# 在图像上绘制一条蓝色的对角线,线宽为5像素
cv.line(img,(0,0),(511,511),(255,0,0),5)
cv.circle(img, (256, 256), 100, (0, 0, 255), 2)
cv.circle(img, (256, 256), 100, (255, 0, 0), -1)
cv.circle(img, (100, 100), 50, (255, 0, 0), 2)
cv.circle(img, (200, 200), 80, (0, 255, 0), -1)
cv.circle(img, (300, 300), 30, (0, 0, 255), -1)

cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

5.opencv cv.rectangle()绘制矩形

代码

import numpy as np
import cv2 as cv

# 创建一个空白图像
img = np.zeros((512, 512, 3), np.uint8)

# 在图像上绘制一个矩形,左上角坐标为(100, 100),右下角坐标为(400, 300),颜色为绿色,线宽为2
cv.rectangle(img, (100, 100), (400, 300), (0, 255, 0), 2)

# 显示图像
cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

第一个参数是图像。
第二个参数是矩形的左上角坐标 (x1, y1)。
第三个参数是矩形的右下角坐标 (x2, y2)。
第四个参数是颜色,以 (B, G, R) 的形式指定。
第五个参数是线宽,如果为负数,则表示填充整个矩形。

效果

在这里插入图片描述

6.opencv cv.rectangle()绘制多个矩形

代码

import numpy as np
import cv2 as cv

# 画一个黑色背景
img = np.zeros((512, 512, 3), np.uint8)

# 画很多个矩形  -1是画一个实心的
cv.rectangle(img, (100, 100), (200, 200), (0, 255, 0), 2)
cv.rectangle(img, (300, 300), (400, 400), (0, 0, 255), -1)

cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

7.opencv cv.ellipse()绘制椭圆

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

img:要在上面绘制椭圆的图像或绘图表面。
center:椭圆中心的坐标,以元组 (x, y) 形式表示。
axes:表示椭圆的长轴和短轴长度的元组 (major_axis_length, minor_axis_length)。
angle:椭圆的旋转角度,以度为单位。
startAngle:椭圆弧的起始角度,以度为单位。
endAngle:椭圆弧的结束角度,以度为单位。
color:椭圆的颜色,使用 BGR 格式表示。可以是一个标量值或元组 (B, G, R)。
thickness(可选):表示椭圆边界的厚度。如果未指定,椭圆将被填充。
lineType(可选):指定用于绘制椭圆边界的线条类型。可以是以下之一:cv2.LINE_4、cv2.LINE_8、cv2.LINE_AA。默认情况下,使用 cv2.LINE_8。
shift(可选):指定椭圆中心和轴值的坐标中的小数位数。默认为 0。

代码

import numpy as np
import cv2 as cv

# Create a blank image
img = np.zeros((512, 512, 3), np.uint8)

# Draw multiple rectangles
cv.rectangle(img, (100, 100), (200, 200), (0, 255, 0), 2)
cv.rectangle(img, (300, 300), (400, 400), (0, 0, 255), -1)
# 绘制一个填充的红色椭圆
center = (250, 250)
axes = (150, 100)
color = (0, 0, 255)  # 使用 BGR 颜色格式
cv.ellipse(img, center, axes, 0, 0, 360, color, thickness=-1)
# Display the image
cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

将椭圆放在图像的右上角代码

可以通过调整椭圆中心的坐标来实现

import numpy as np
import cv2 as cv

# Create a blank image
img = np.zeros((512, 512, 3), np.uint8)

# Draw multiple rectangles
cv.rectangle(img, (100, 100), (200, 200), (0, 255, 0), 2)
cv.rectangle(img, (300, 300), (400, 400), (0, 0, 255), -1)
# 绘制一个填充的红色椭圆
center = (250, 250)
axes = (150, 100)
color = (0, 0, 255)  # 使用 BGR 颜色格式
cv.ellipse(img, center, axes, 0, 0, 360, color, thickness=-1)
center = (400, 100)  # 将椭圆中心的坐标修改为右上角位置
axes = (15, 10)
color = (0, 0, 255)  # 使用 BGR 颜色格式
cv.ellipse(img, center, axes, 0, 0, 360, color, thickness=-1)
# Display the image
cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

8.opencv cv.putText()绘制文本

置绘制单行或多行文本,并允许你设置字体、字号、颜色等文本属性。

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

img:要在上面绘制文本的图像或绘图表面。
text:要绘制的文本内容。
org:文本的起始坐标,以元组 (x, y) 形式表示,表示文本框左下角的位置。
fontFace:字体类型,可以是预定义的字体名称,也可以是自定义字体文件的路径。
fontScale:字体缩放因子,决定文本的大小。
color:文本的颜色,使用 BGR 格式表示。可以是一个标量值或元组 (B, G, R)。
thickness(可选):文本的线条粗细,如果为 0,则表示绘制填充的文本。默认值为 1。
lineType(可选):文本边界的线条类型,可以是以下之一:cv2.LINE_4、cv2.LINE_8、cv2.LINE_AA。默认情况下,使用 cv2.LINE_8。
bottomLeftOrigin(可选):如果为 True,则将 org 参数解释为文本框左下角的位置。默认为 False,表示 org 参数解释为文本框左上角的位置

代码

import numpy as np
import cv2 as cv

# Create a blank image
img = np.zeros((512, 512, 3), np.uint8)

# Draw multiple rectangles
cv.rectangle(img, (100, 100), (200, 200), (0, 255, 0), 2)
cv.rectangle(img, (300, 300), (400, 400), (0, 0, 255), -1)
# 绘制一个填充的红色椭圆
center = (250, 250)
axes = (150, 100)
color = (0, 0, 255)  # 使用 BGR 颜色格式
cv.ellipse(img, center, axes, 0, 0, 360, color, thickness=-1)
center = (400, 100)  # 将椭圆中心的坐标修改为右上角位置
axes = (15, 10)
color = (0, 0, 255)  # 使用 BGR 颜色格式
cv.ellipse(img, center, axes, 0, 0, 360, color, thickness=-1)
# 绘制文本
text = "Hello, OpenCV!"
org = (50, 100)  # 文本框左下角的位置
fontFace = cv.FONT_HERSHEY_SIMPLEX  # 字体类型
fontScale = 1.5  # 字体缩放因子
color = (255, 255, 255)  # 使用白色文本
thickness = 2  # 文本线条粗细
cv.putText(img, text, org, fontFace, fontScale, color, thickness)
# Display the image
cv.imshow('Image', img)
cv.waitKey(0)
cv.destroyAllWindows()

效果

在这里插入图片描述

9.综合练习

代码

import cv2
import numpy as np
import matplotlib.font_manager as fm
# 创建一张空白图像
img = np.zeros((400, 600, 3), dtype=np.uint8)

# 绘制直线
start_point = (50, 50)
end_point = (550, 50)
line_color = (0, 255, 0)  # 绿色线条
line_thickness = 2
cv2.line(img, start_point, end_point, line_color, line_thickness)

# 绘制圆
center = (300, 200)
radius = 100
circle_color = (0, 0, 255)  # 红色圆圈
circle_thickness = 3
cv2.circle(img, center, radius, circle_color, circle_thickness)

# 绘制矩形
top_left = (100, 250)
bottom_right = (400, 350)
rectangle_color = (255, 0, 0)  # 蓝色矩形
rectangle_thickness = -1  # 填充矩形
cv2.rectangle(img, top_left, bottom_right, rectangle_color, rectangle_thickness)

# 绘制椭圆
center = (500, 300)
axes = (100, 50)
angle = 30
start_angle = 0
end_angle = 360
ellipse_color = (255, 255, 0)  # 黄色椭圆
ellipse_thickness = 2
cv2.ellipse(img, center, axes, angle, start_angle, end_angle, ellipse_color, ellipse_thickness)

# 绘制文本
text = "中文"
font_size = 30
org = (200, 150)
font_face = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.5
text_color = (255, 255, 255)  # 白色文本
text_thickness = 2
cv2.putText(img, text, org, fontFace=font_face, fontScale=font_size/10, color=text_color, thickness=text_thickness)

# 显示图像
cv2.imshow("绘图示例", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果

在这里插入图片描述

问题

所有字体都不支持中文 会乱码

  • 37
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 37
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cv夏一笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值