欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

处理OpenCV中文乱码问题-放置文字putText的解决方案

最编程 2023-12-31 20:59:13
...

 

原文链接: opencv 放置文字 中文乱码处理 putText

上一篇: opencv 模板匹配

下一篇: scipy 最小二成法拟合曲线方程

函数说明

	void cv::putText(
		cv::Mat& img, // 待绘制的图像
		const string& text, // 待绘制的文字
		cv::Point origin, // 文本框的左下角
		int fontFace, // 字体 (如cv::FONT_HERSHEY_PLAIN)
		double fontScale, // 尺寸因子,值越大文字越大
		cv::Scalar color, // 线条的颜色(RGB)
		int thickness = 1, // 线条宽度
		int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)
		bool bottomLeftOrigin = false // true='origin at lower left'
	);

import cv2

image = cv2.imread("img.png")
font = cv2.FONT_HERSHEY_SIMPLEX  # 定义字体

# cv2.putText(image, u"paojie", (10, 130), 6, 5, (255, 0, 255), 5)
cv2.putText(image, "hello", (100, 200), 5, 5, (255, 0, 255), 5)
cv2.imshow("putTextPractice", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

中文处理,使用PIL中转一下

import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np

cv2.namedWindow("mark", cv2.WINDOW_AUTOSIZE)
image = cv2.imread("img.png")
cv2_im = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # cv2和PIL中颜色的hex码的储存顺序不同
pil_im = Image.fromarray(cv2_im)

draw = ImageDraw.Draw(pil_im)  # 括号中为需要打印的canvas,这里就是在图片上直接打印
font = ImageFont.truetype("font.ttf", 20, encoding="utf-8")  # 第一个参数为字体文件路径,第二个为字体大小
draw.text((0, 0), "eg:打印在这里", (0, 0, 255), font=font)  # 第一个参数为打印的坐标,第二个为打印的文本,第三个为字体颜色,第四个为字体

cv2_text_im = cv2.cvtColor(np.array(pil_im), cv2.COLOR_BGR2RGB)
cv2.imshow("Video", cv2_text_im)
cv2.waitKey(0)
cv2.destroyAllWindows()