【计算机视觉(3)】

图形与文字的绘制:

画线

img = cv2.line(img, pt1, pt2, color, thickness)
参数:
img:画布。
pt1:线段的起点坐标。
pt2:线段的终点坐标。
color:绘制线段时的线条颜色。
thickness:绘制线段时的线条宽度。

画矩形

img = cv2.rectangle(img, pt1, pt2, color,thickness)
参数:
img:画布。
pt1:矩形的左上角坐标。
pt2:矩形的右下角坐标。
color:绘制矩形时的线条颜色。
thickness:绘制矩形时的线条宽度。

画圆

img = cv2.circle(img, center, radius, color, thickness)
参数:
img:画布。
center:圆形的圆心坐标。
radius:圆形的半径。
color:绘制圆形时的线条颜色。
thickness:绘制圆形时的线条宽度。

画多边形

img = cv2.polylines(img, pts, isClosed, color, thickness)
参数:
img:画布。
pts:由多边形各个顶点的坐标组成的一个列表,这个列表是
一个numpy的数组类型。
isClosed:如果值为True,表示一个闭合的多边形;如果值为
False,表示一个不闭合的多边形。
color:绘制多边形时的线条颜色。
thickness:绘制多边形时的线条宽度。

加文字

img = cv2.putText(img, text, org, fontFace, fontScale, color, thickness)
参数:
img:画布。
text:要绘制的文字内容。
org:文字在画布中的左下角坐标。
fontFace:字体样式,可选参数如下:
cv2.FONT_HERSHEY_SIMPLEX:正常大小的无衬线字体。(常用)
cv2.FONT_HERSHEY_PLAIN:小号无衬线字体。
cv2.FONT_HERSHEY_DUPLEX:正常大小的无衬线字体,比FONT_HERSHEY_SIMPLEX更复杂。
cv2.FONT_HERSHEY_COMPLEX:正常大小的有衬线字体。
cv2.FONT_HERSHEY_TRIPLEX:正常大小的有衬线字体,比FONT_HERSHEY_COMPLEX更复杂。
cv2.FONT_HERSHEY_COMPLEX_SMALL:FONT_HERSHEY_COMPLEX的小版本。
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写风格的字体。
cv2.FONT_HERSHEY_SCRIPT_COMPLEX:更复杂的手写风格字体。
fontScale:字体大小。
color:绘制文字时的线条颜色。
thickness:绘制文字时的线条宽度

图形与文字绘制的代码实现:

import cv2                         
import matplotlib.pyplot as plt 
import numpy as np  
  
image = cv2.imread("img/cat.jpg")  
image_1 = image.copy()  # 复制一份原图 
image_2 = image.copy()   
image_3 = image.copy()   
image_4 = image.copy()  
image_5 = image.copy()  
  
'''''单独绘制'''  
# 在图片上,绘制一条起点坐标为(50, 50)、终点坐标为(250, 50)、蓝色的、线条宽度为5的线段  
line = cv2.line(image_1, (50, 50), (250, 50), (255, 0, 0), 5)   
  
# 在图片上绘制一个左上角坐标为(50,50)、右下角坐标为(200,150)、青色的、线条宽度为20的矩形边框  
rectangle = cv2.rectangle(image_2, (50, 50), (200, 150), (255, 255, 0), 20)  
  
# 在图片上,绘制一个圆心坐标为(50, 50)、半径为40、红色的实心圆形  
circle = cv2.circle(image_3, (50, 50), 40, (0, 0, 255), -1)  
  
# 顺时针的给出四个顶点,这4个顶点的坐标构成了一个大小等于“顶点个数 * 1 * 2”的数组  
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32) # 这个数组的数据类型为np.int32  
# 在图片上根据4个顶点的坐标,绘制一个闭合的、红色的、线条宽度为5的等腰梯形边框  
polylines = cv2.polylines(image_4, [pts], True, (0,0, 255), 5)  
  
# 在图片上绘制文字“test”,文字左下角的坐标为(20, 70) 字体样式为FONT_HERSHEY_TRIPLEX 字体大小为2,线条颜色是绿色,线条宽度为5  
cv2.putText(image_5, "test", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)  
  
'''''一起绘制'''  
# 绘制线段  
line_ = cv2.line(image, (50, 50), (250, 50), (255, 0, 0), 5)   
# 绘制矩形边框  
rectangle_ = cv2.rectangle(image, (50, 50), (200, 150), (255, 255, 0), 20)  
# 绘制实心圆形  
circle_ = cv2.circle(image, (50, 50), 40, (0, 0, 255), -1)  
# 绘制多边形  
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32)   
polylines_ = cv2.polylines(image, [pts], True, (0,0, 255), 5)  
# 在图片上绘制文字“test”  
cv2.putText(image, "test", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)  
  
# opencv是BGR格式的需要转成RGB在matplotlib上进行演示  
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)   
line = cv2.cvtColor(line, cv2.COLOR_BGR2RGB)   
rectangle = cv2.cvtColor(rectangle, cv2.COLOR_BGR2RGB)  
circle = cv2.cvtColor(circle, cv2.COLOR_BGR2RGB)   
polylines = cv2.cvtColor(polylines, cv2.COLOR_BGR2RGB)   
image_5 = cv2.cvtColor(image_5, cv2.COLOR_BGR2RGB)  
  
titles = ["total", "line", "rectangle", "circle", "polylines", "putText"] # 创建一个标题列表  
image_list = [image, line, rectangle, circle, polylines, image_5] # 创建一个图像列表  
  
for i in range(6):  
    plt.subplot(2, 3, i + 1), plt.imshow(image_list[i], 'gray')  # 在子图中显示对应的图像, 在子图中显示对应的图像(在灰度模式下)。  
    plt.title(titles[i]) # 对每一个图设置对应的名称  
    plt.xticks([]), plt.yticks([]) # 不显示x,y轴名称  
plt.show()        # 显示图像

代码实现效果如下图:
在这里插入图片描述

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 在3D计算机视觉中,图像分类是指将图像中的像素点分割成不同的区块,并为每个区块分配类别标签的过程。这个过程可以通过图像分割技术来实现。图像分割是图像处理的重要组成部分,也是一个难点。通过给出图像中每个像素点的标签,可以将图像分割成若干带类别标签的区块。图像分割技术已经在交通控制、医疗影像和人脸识别等多个领域得到了广泛的应用。\[1\]在3D计算机视觉中,图像分类还涉及到将3D图元投影到图像平面上的过程。可以使用线性3D到2D投影矩阵来实现这一过程。最简单的模型是正交法,它不需要除法就可以得到最终的结果。更常用的模型是透视,因为它更准确地模拟了真实相机的行为。\[2\]此外,还需要考虑像素传感器间距和传感器平面与原点的相对位置来转换结果坐标。这些几何图形的转换过程可以通过使用传感器单应性和相机内在矩阵来实现。传感器单应性用于将2D像素坐标映射到3D射线,而相机内在矩阵用于将3D相机中心点映射到2D像素坐标。\[3\]综上所述,3D计算机视觉图像分类涉及到图像分割、投影和坐标转换等过程。 #### 引用[.reference_title] - *1* [计算机视觉论文总结系列(二):图像分割篇](https://blog.csdn.net/qq_36816848/article/details/129629857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [计算机视觉 图像形成 几何图形和变换 3D到2D投影](https://blog.csdn.net/bashendixie5/article/details/124991406)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值