3小时精通opencv(三)图片裁剪与形状绘制

3小时精通opencv(三)图片裁剪与形状绘制

参考视频资源:3h精通Opencv-Python


图片裁剪

图片裁剪不需要使用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)

猜你喜欢

转载自blog.csdn.net/Weary_PJ/article/details/128748822