opencv c++ cv::putText 中文乱码
时间: 2024-02-05 10:04:32 浏览: 367
在使用 OpenCV C++ 中的 `cv::putText()` 绘制中文时,需要指定中文字体,例如:
```c++
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
int main()
{
cv::Mat img = cv::imread("中文.jpg");
cv::namedWindow("原图", cv::WINDOW_NORMAL);
cv::imshow("原图", img);
// 设置中文字体
const char* font_path = "STHeiti Medium.ttc";
cv::Scalar textColor(0, 0, 255);
// 在图片上绘制中文文字
cv::putText(img, "中文测试", cv::Point(20, 50), cv::FONT_HERSHEY_SIMPLEX, 1.0, textColor, 2, cv::LINE_AA, false);
cv::imshow("加文字后", img);
cv::waitKey(0);
cv::destroyAllWindows();
return 0;
}
```
其中,`STHeiti Medium.ttc` 是中文字体文件的路径,通过指定字体文件路径即可使用中文字体绘制中文。
相关问题
c++ opencv图像上绘制文字中文乱码问题
在 OpenCV 中绘制中文时,可能会遇到乱码问题。这是因为 OpenCV 默认使用的是 ASCII 编码,而中文需要使用 Unicode 编码。为了解决这个问题,可以按照以下步骤操作:
1. 将要绘制的中文字符串转换为 Unicode 编码,可以使用 Qt 的 QString 类进行转换。
2. 将 Unicode 编码转换为 UTF-8 编码,可以使用 ICU 库进行转换。
3. 使用 OpenCV 的 putText 函数绘制 UTF-8 编码的字符串。
下面是一个示例代码:
```
#include <opencv2/opencv.hpp>
#include <QString>
#include <unicode/ucnv.h>
int main()
{
// 要绘制的中文字符串
QString text = QString::fromUtf8("你好,世界!");
// 将字符串转换为 Unicode 编码
std::u16string utf16 = text.toStdU16String();
// 将 Unicode 编码转换为 UTF-8 编码
UErrorCode status = U_ZERO_ERROR;
UConverter* utf8_converter = ucnv_open("UTF-8", &status);
std::string utf8;
utf8.resize(utf16.size() * 3);
int32_t utf8_length = ucnv_fromUChars(utf8_converter, &utf8[0], utf8.size(), reinterpret_cast<const UChar*>(utf16.data()), utf16.size(), &status);
utf8.resize(utf8_length);
// 创建一个黑色图像
cv::Mat img = cv::Mat::zeros(100, 200, CV_8UC3);
// 在图像上绘制字符串
cv::putText(img, utf8, cv::Point(10, 50), cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(0, 0, 255), 2);
// 显示图像
cv::imshow("image", img);
cv::waitKey();
return 0;
}
```
在上面的代码中,我们使用了 Qt 的 QString 类将中文字符串转换为 Unicode 编码,然后使用 ICU 库将 Unicode 编码转换为 UTF-8 编码。最后,我们使用 OpenCV 的 putText 函数在图像上绘制字符串。
c++ opencv 显示中文
要在OpenCV中显示中文,首先需要确保已安装并配置了支持中文的字体库。可以通过以下步骤实现:
1. 下载并安装中文字体库:从互联网上下载一个中文字体库文件,例如SimHei.ttf或SimSun.ttf等,并将其拷贝到系统字体目录中。
2. 在代码中使用中文字体库:在OpenCV的代码中导入所需的头文件,并使用cv::putText函数来显示中文。在putText函数中,需要设置字体、字体大小、字体颜色和字体厚度等参数。
例如,以下代码段展示了如何在OpenCV中显示中文:
```c++
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
cv::putText(image, "你好", cv::Point(100, 100), cv::FONT_HERSHEY_SIMPLEX, 2, cv::Scalar(0, 255, 0), 2);
cv::imshow("Image", image);
cv::waitKey(0);
return 0;
}
```
运行此代码,将在一个黑色背景上显示一个绿色的“你好”字样。
请注意,在使用putText函数显示中文时,确保使用正确的编码格式,以避免出现乱码问题。另外,OpenCV对中文支持并不完全,因此可能会遇到一些兼容性问题,如果遇到问题,可以尝试使用其他字体或工具来解决。
阅读全文