cv::gettextsize
时间: 2024-01-04 11:01:06 浏览: 19
cv::getTextSize是OpenCV中的一个函数,用于计算给定文本的大小。它的作用是根据指定的字体类型、字体比例和字体厚度来计算文本的宽度和高度。通常情况下,我们需要在图像上写入文本时,会用到这个函数来计算文本的大小,以便确定文本放置的位置和大小。
该函数的用法比较简单,只需要传入要计算的文本、字体类型、字体比例和字体厚度等参数,就可以得到文本的宽度和高度。一般来说,宽度和高度的计算是基于字体类型和比例来确定的,不同的字体类型和比例会导致不同的文本大小。此外,还可以通过设置字体厚度来调整文本的粗细,从而影响文本大小的计算结果。
使用cv::getTextSize函数可以帮助我们在图像上精确地绘制文本,确保文本不会超出图像边界或者重叠在其他元素上。在图像处理和计算机视觉应用中,通常需要在图像上标注一些信息或者结果,这时候就可以用到这个函数来计算文本的大小,从而确定文本的位置和大小,使得图像上的文本显示更加美观和准确。熟练掌握cv::getTextSize函数的使用方法,对于图像处理和计算机视觉领域的开发者来说是非常重要的。
相关问题
c++ 代码实现:下面说明obj.seg是yolov8预测出来的mask图,要求将obj.seg 上采样之后再渲染到原图上 cv::Mat image = cv::imread("inference/yq.jpg"); auto yolo = yolo::load("/home/zhangyu/tensorrt_code/test/1.18-integrate-full-yolov5/workspace/last.transd.trtmodel", yolo::Type::V8Seg); if (yolo == nullptr) return; auto objs = yolo->forward(cvimg(image)); int i = 0; for (auto &obj : objs) { uint8_t b, g, r; tie(b, g, r) = yolo::random_color(obj.class_label); cv::rectangle(image, cv::Point(obj.left, obj.top), cv::Point(obj.right, obj.bottom), cv::Scalar(b, g, r), 5); auto name = cocolabels[obj.class_label]; auto caption = cv::format("%s %.2f", name, obj.confidence); int width = cv::getTextSize(caption, 0, 1, 2, nullptr).width + 10; cv::rectangle(image, cv::Point(obj.left - 3, obj.top - 33), cv::Point(obj.left + width, obj.top), cv::Scalar(b, g, r), -1); cv::putText(image, caption, cv::Point(obj.left, obj.top - 5), 0, 1, cv::Scalar::all(0), 2, 16); if (obj.seg) { // cv::imwrite(cv::format("%d_mask.jpg", i), // cv::Mat(obj.seg->height, obj.seg->width, CV_8U, obj.seg->data)); i++; } } printf("Save result to Result.jpg, %d objects\n", (int)objs.size()); cv::imwrite("Result.jpg", image); }
可以使用cv::resize函数对obj.seg进行上采样,然后使用cv::addWeighted函数将上采样后的mask图与原图叠加在一起,实现渲染。代码如下:
```
cv::Mat image = cv::imread("inference/yq.jpg");
auto yolo = yolo::load("/home/zhangyu/tensorrt_code/test/1.18-integrate-full-yolov5/workspace/last.transd.trtmodel", yolo::Type::V8Seg);
if (yolo == nullptr) return;
auto objs = yolo->forward(cvimg(image));
int i = 0;
for (auto &obj : objs) {
uint8_t b, g, r;
tie(b, g, r) = yolo::random_color(obj.class_label);
cv::rectangle(image, cv::Point(obj.left, obj.top), cv::Point(obj.right, obj.bottom),
cv::Scalar(b, g, r), 5);
auto name = cocolabels[obj.class_label];
auto caption = cv::format("%s %.2f", name, obj.confidence);
int width = cv::getTextSize(caption, 0, 1, 2, nullptr).width + 10;
cv::rectangle(image, cv::Point(obj.left - 3, obj.top - 33),
cv::Point(obj.left + width, obj.top), cv::Scalar(b, g, r), -1);
cv::putText(image, caption, cv::Point(obj.left, obj.top - 5), 0, 1, cv::Scalar::all(0), 2, 16);
if (obj.seg) {
// 上采样
cv::Mat seg(obj.seg->height, obj.seg->width, CV_8U, obj.seg->data);
cv::resize(seg, seg, image.size(), cv::INTER_LINEAR);
// 颜色映射
cv::Mat color_map;
cv::applyColorMap(seg, color_map, cv::COLORMAP_JET);
// 叠加
cv::addWeighted(color_map, 0.5, image, 0.5, 0, image);
// cv::imwrite(cv::format("%d_mask.jpg", i),
// cv::Mat(obj.seg->height, obj.seg->width, CV_8U, obj.seg->data));
i++;
}
}
printf("Save result to Result.jpg, %d objects\n", (int)objs.size());
cv::imwrite("Result.jpg", image);
```
c++ getTextSize
在 C++ 中,getTextSize 是 OpenCV 库中的一个函数,用于获取指定文本的大小。
函数的原型为:
```cpp
void cv::getTextSize(const String& text, int fontFace, double fontScale, int thickness, int* baseLine, cv::Size& size)
```
其中,参数含义如下:
- text:要测量大小的文本。
- fontFace:字体类型,如 cv::FONT_HERSHEY_SIMPLEX、cv::FONT_HERSHEY_PLAIN 等。
- fontScale:字体缩放比例。
- thickness:字体线宽。
- baseLine:输出参数,指向基线的指针。
- size:输出参数,指向文本大小的指针。
例如,以下代码可以获取字符串 "Hello, world!" 使用字体 cv::FONT_HERSHEY_SIMPLEX、缩放比例 1.0 和线宽 1 时的大小:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
String text = "Hello, world!";
int fontFace = FONT_HERSHEY_SIMPLEX;
double fontScale = 1.0;
int thickness = 1;
int baseline = 0;
Size textSize = getTextSize(text, fontFace, fontScale, thickness, &baseline);
cout << "Text size: " << textSize.width << ", " << textSize.height << endl;
return 0;
}
```
输出结果为:
```
Text size: 104, 16
```