OpenCV图像拼图截图添加汉字

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:\Windows\Fonts 中汉字的类型 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)

 

posted @ 2020-04-12 10:28  随性岁分享  阅读(392)  评论(0编辑  收藏  举报