import base64
# base64通过网络传递图像
image = cv2.imencode('.jpg', frame)[1]
base64_data = base64.b64encode(image)
data = base64_data.decode()
image_data = 'data:image/jpeg;base64,' + data
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
# 合并图像,且图像通道必须是一样的
def merge_image(image1, image2):
h1, w1, c1 = image1.shape
h2, w2, c2 = image2.shape
if c1 != c2:
return "两幅图通道不一样,无法合并!"
else:
if w1 > w2:
tmp = np.zeros([h2, w1 - w2, c1])
image = np.hstack([image2, tmp])
image = np.vstack([image1, image])
elif w1 == w2:
image = np.vstack([image1, image2])
else:
tmp = np.zeros([h1, w2 - w1, c2])
image = np.hstack([image1, tmp])
image = np.vstack([image, image2])
return image
# 给图像添加汉字
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)
# 字体的格式 "font/STXIHEL.TTF" 是本机电脑路径为 C:WindowsFonts 中汉字的类型
fontStyle = ImageFont.truetype(
"font/STXIHEI.TTF", textSize, encoding="utf-8")
# 绘制文本
draw.text((left, top), text, textColor, font=fontStyle)
# 转换回OpenCV格式
return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
# 截取图像中的坐标位置(大小是根据图像的大小来决定的)
def screenshot_image(image):
crop = image[0:512, 0:600] # 裁剪坐标为[y0:y1, x0:x1]
cv2.imwrite("crop.jpg", crop)
if __name__ == '__main__':
img = "./0412.jpg"
read_img = cv2.imread(img)
# 因为我的原图是(512,512,3)所以为了保证合并的图像不发生形变,自己画了一张(512,512,3)的图
src = np.zeros((512, 512, 3), np.uint8)
bit_img = cv2.bitwise_not(src)
merge_img = merge_image(read_img, bit_img)
cv2.imshow("merge_img", merge_img)
cv2.imwrite("./merge_img.jpg", merge_img)
iamge = screenshot_image(merge_img)
ret = "瞅你咋滴!"
img = cv2ImgAddText(iamge, ret, 512/2-10, 546, (255, 0, 139), 20)
cv2.imshow('show', img)
cv2.waitKey(0)