opencv putText图片中写文字

本文介绍如何使用OpenCV在图片上添加文字。通过C++代码示例展示了如何读取图片、在指定位置添加文字并显示处理后的图片。

图片中写入文字

#include <QCoreApplication>
#include <opencv2/opencv.hpp>

int main(int argc, char *argv[])
{
    //QCoreApplication a(argc, argv);
    cv::Mat img;
    img = cv::imread("opencv.jpg");
    //std::cout <<img.cols <<", "<<img.rows<<std::endl;

    /////////////////图片中输入文字

    char str_lx[6];
    int num=5;
    sprintf(str_lx,"lxhello%d",num);

    cv::putText(img,str_lx,cv::Point(100,100),CV_FONT_HERSHEY_SIMPLEX,1,
                cv::Scalar(100,100));

     ///////////////////////////


    cv::imshow("core_process",img);

    cv::waitKey();
    return 0;
   // return a.exec();
}
OpenCV 中使用 `putText` 函数添加中文文本时,由于 OpenCV 原生的 `putText` 函数仅支持 ASCII 字符集,无法直接渲染中文字符[^2]。为了解决这个问题,有几种方法可以实现中文文本的显示。 ### 方法一:使用 FreeType 库支持中文显示(C++) OpenCV 提供了对 FreeType 库的支持,通过 `freetype::FreeType2` 接口可以加载 TrueType 字体文件并渲染中文文本。这种方法适用于 C++ 开发环境。示例代码如下: ```cpp #include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/freetype.hpp> using namespace std; using namespace cv; int main() { Mat image(1000, 1800, CV_8UC3, Scalar(200, 162, 33)); // 创建空白图像 Ptr<freetype::FreeType2> ft2 = freetype::createFreeType2(); ft2->loadFontData("simhei.ttf", 0); // 加载字体文件 ft2->putText(image, "中文显示", Point(500, 500), 150, CV_RGB(255, 206, 57), FILLED, LINE_AA, true); // 绘制中文文本 imshow("显示中文", image); waitKey(0); return 0; } ``` ### 方法二:使用 PIL 库转换图像(Python) 在 Python 中,可以通过 PIL(Pillow)库来实现中文文本的渲染。具体做法是将 OpenCV 图像转换为 PIL 图像格式,使用 `ImageFont.truetype` 加载字体并绘制文本,最后将图像转换回 OpenCV 格式。示例代码如下: ```python import cv2 import numpy as np from PIL import Image, ImageDraw, ImageFont def put_chinese_text(img, text, position, font_path, font_size, color): img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) draw = ImageDraw.Draw(img_pil) font = ImageFont.truetype(font_path, font_size, encoding="utf-8") draw.text(position, text, font=font, fill=color) img = cv2.cvtColor(np.asarray(img_pil), cv2.COLOR_RGB2BGR) return img # 使用示例 image = np.zeros((500, 800, 3), dtype=np.uint8) font_path = 'simhei.ttf' # 字体文件路径 position = (50, 50) font_size = 30 color = (0, 255, 0) # 绿色 image = put_chinese_text(image, "你好,世界!", position, font_path, font_size, color) cv2.imshow("中文显示", image) cv2.waitKey(0) ``` ### 方法三:使用 OpenCV 的 freetype 模块(Python) OpenCV 的 `freetype` 模块也可以在 Python 中使用,通过 `cv2.freetype.createFreeType2()` 接口加载字体并绘制中文文本。示例代码如下: ```python import cv2 import numpy as np # 创建空白图像 im = np.zeros((100, 1000, 3), dtype=np.uint8) # 初始化 FreeType2 对象 ft2 = cv2.freetype.createFreeType2() # 加载字体文件 ft2.loadFontData("msjh.ttf", 0) # 请根据实际路径修改字体文件路径 # 绘制中文文本 text = "各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细" ft2.putText(im, text, (10, 10), fontHeight=50, color=(255, 255, 255), thickness=-1, line_type=cv2.LINE_4, bottomLeftOrigin=False) # 显示图像 cv2.imshow("im", im) cv2.waitKey(0) ``` ### 方法四:使用外部库(如 Cairo、Pango 等) 除了 OpenCV 自带的方法外,还可以使用其他图形库如 Cairo、Pango 等进行文本渲染,然后将结果图像转换为 OpenCV 格式。这种方法通常需要额外的依赖安装和更复杂的配置。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值