绘制形状的函数有一些共同的参数,提前在此说明一下:
- img:要绘制形状的图片
- color:绘制的颜色彩色图就传入BGR的一组值,如蓝色就是(255,0,0) 灰度图,传入一个灰度值就行
- thickness:线宽,默认为1;对于矩形/圆之类的封闭形状而言,传入-1表示填充形状
import cv2
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageDraw, ImageFont
def line():
# 创建黑色的图像
img = np.zeros((300, 300,3), dtype=np.uint8)
# 绘制一条厚度为5的蓝色对角线
cv2.line(img,(0,0),(299,299),(255,0,0),5)
cv2.imshow("img",img)
# 画矩形
def rect():
# 创建黑色的图像
img = np.zeros((300, 300, 3), dtype=np.uint8)
# 右上角绘制一个绿色矩形
cv2.rectangle(img, (20, 20), (100, 100), (0, 255, 0), 3)
cv2.imshow("img", img)
# 画圆圈
def cir():
# 创建黑色的图像
img = np.zeros((300, 300, 3), dtype=np.uint8)
# 右上角绘制一个绿色矩形
cv2.circle(img,(150,150), 80, (0,0,255), 2)
cv2.imshow("img", img)
# 显示文字
def text():
# 创建黑色的图像
img = np.zeros((300, 300, 3), dtype=np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10, 280), font, 2, (255, 255, 255), 4, cv2.LINE_AA)
cv2.imshow("img", img)
def draw():
# 创建黑色的图像
img = np.zeros((300, 300, 3), dtype=np.uint8)
# 绘制一条厚度为5的蓝色对角线
cv2.line(img, (0, 0), (299, 299), (255, 0, 0), 5)
cv2.rectangle(img, (20, 20), (100, 100), (0, 255, 0), 2)
cv2.circle(img, (200, 100), 50, (0, 0, 255),2)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10, 280), font, 2, (255, 255, 255), 4, cv2.LINE_AA)
cv2.imshow("img", img)
# 填充
def fill():
# 创建黑色的图像
img = np.zeros((300, 300,3), dtype=np.uint8)
# 绘制一条厚度为5的蓝色对角线
cv2.line(img, (0, 0), (299, 299), (255, 0, 0), 5)
cv2.rectangle(img, (20, 20), (100, 100), (0, 255, 0), -1)
cv2.circle(img, (200, 100), 50, (0, 0, 255), -1)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10, 280), font, 2, (255, 255, 255), 4, cv2.LINE_AA)
cv2.imshow("img", img)
def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
if (isinstance(img, np.ndarray)): # 判断是否OpenCV图片类型
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img)
# 字体的格式
fontStyle = ImageFont.truetype(
"simsun.ttc", textSize, encoding="utf-8")
# 绘制文本
draw.text((left, top), text, textColor, font=fontStyle)
# 转换回OpenCV格式
return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
#中文中文
def text_zh():
# 创建黑色的图像
img = np.zeros((300, 300, 3), dtype=np.uint8)
img2=cv2ImgAddText(img, "hello中文", 10, 65, (255, 255, 255), 20)
cv2.imshow("img", img2)