3小时精通opencv(三)图片裁剪与形状绘制
参考视频资源:3h精通Opencv-Python
文章目录
- 3小时精通opencv(三)图片裁剪与形状绘制
- 图片裁剪
- 绘制形状
- 绘制直线
- 绘制矩形
- 绘制圆形
- 绘制文字
- 整体代码
图片裁剪
图片裁剪不需要使用opencv中特有的函数, 对于opencv中读取到的图像, 直接当做矩阵来处理即可, 使用切片的操作就相当于对图像进行了裁剪
import cv2
import numpy as np
img = cv2.imread('Resources/lambo.PNG')
print(img.shape) # (462, 623, 3)
img_resize = cv2.resize(img, (500, 300))
print(img_resize.shape) # (300, 500, 3)
img_crop = img[0:200, 200:500]
cv2.imshow('image', img)
# cv2.imshow('image resize', img_resize)
cv2.imshow('image crop', img_crop)
cv2.waitKey(0)
绘制形状
图像绘制较为简单, 看一下参数的英文大概就知道需要输入什么了
可以应用于目标检测中绘制预测框和标注预测类别等功能
绘制直线
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
# 画线
cv2.line(img, (0, 0), (100, 300), (0, 255, 0), 3) # 从0,0 到 300,300 的线 宽度为3
# cv2.line(img, (0, 0), (img.shape[1], img.shape[0]), (0, 255, 0), 3) # 从0,0 到 300,300 的线 宽度为3
cv2.imshow('Image', img)
cv2.waitKey(0)
通常需要使用前5
个参数
img
: 输入的图像pt1
: 线段的起始坐标pt2
: 线段的结束坐标color
: 线段的颜色thickness
: 线段的粗细
拓展: opencv中的坐标
绘制矩形
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
# 画矩形
cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), 2) # opencv的坐标默认先x轴后y轴, 即先width再height
# cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), cv2.FILLED) # 填充矩形区域
cv2.rectangle()
cv2.imshow('Image', img)
cv2.waitKey(0)
通常需要使用前5
个参数
img
: 输入的图像pt1
: 矩形的左上角坐标pt2
: 矩形的右下角坐标color
: 矩形外框的颜色thickness
: 矩形外框的粗细 (如果设置为cv2.FILLED
表示填充当前的矩形区域)
绘制圆形
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
# 画圆形
cv2.circle(img, (400, 100), 50, (255, 255, 0), 5)
cv2.imshow('Image', img)
cv2.waitKey(0)
通常需要使用前5
个参数
img
: 输入的图像center
: 圆形坐标radius
: 半径大小color
: 外框颜色thickness
: 外框粗细 (如果设置为cv2.FILLED
表示填充当前区域)
绘制文字
解决绘制时中文汉字乱码问题参考博文
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
# 文字
cv2.putText(img, 'Hello Opencv', (50, 200), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 1) # 一个为字体大小, 一个为字体粗细
cv2.putText(img, 'Hello Opencv', (50, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255), 1)
cv2.putText(img, 'Hello Opencv', (50, 400), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 2)
cv2.imshow('Image', img)
cv2.waitKey(0)
通常需要使用的参数
img
: 输入的图像text
: 文字内容org
: 起始坐标(左上角)fontFace
: 字体fongScale
: 字体大小color
: 颜色thickness
: 字体粗细
整体代码
裁剪图片
import cv2
import numpy as np
img = cv2.imread('Resources/lambo.PNG')
print(img.shape)
img_resize = cv2.resize(img, (500, 300))
print(img_resize.shape)
img_crop = img[0:200, 200:500]
cv2.imshow('image', img)
# cv2.imshow('image resize', img_resize)
cv2.imshow('image crop', img_crop)
cv2.waitKey(0)
绘制图形
import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
# print(img.shape)
# img[100:200, 200:500] = 255, 0, 0 # 蓝色
# 画线
# cv2.line(img, (0, 0), (300, 300), (0, 255, 0), 3) # 从0,0 到 300,300 的线 宽度为3
cv2.line(img, (0, 0), (img.shape[1], img.shape[0]), (0, 255, 0), 3) # 从0,0 到 300,300 的线 宽度为3
# cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), 2) # opencv的坐标默认先x轴后y轴, 即先width再height
cv2.rectangle(img, (0, 0), (250, 350), (0, 0, 255), cv2.FILLED) # 填充矩形区域
cv2.circle(img, (400, 100), 50, (255, 255, 0), 5)
cv2.putText(img, 'Hello Opencv', (50, 200), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 1) # 一个为字体大小, 一个为字体粗细
cv2.putText(img, 'Hello Opencv', (50, 300), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 255), 1)
cv2.putText(img, 'Hello Opencv', (50, 400), cv2.FONT_HERSHEY_COMPLEX, 2, (0, 255, 255), 2)
cv2.imshow('Image', img)
cv2.waitKey(0)