微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
显示效果
如何生成这种显示
OpenCV中有个获取字体跟文本宽高的函数,调用该函数可以获取
Size cv::getTextSize(
const String & text, // 输入文本
int fontFace, // 字体类型
double fontScale, // 字体大小
int thickness, // 字体线宽
int * baseLine // 基线对齐位置
)
相关的代码显示如下 - cpp部分:
定义相关变量
int fontface = cv::FONT_HERSHEY_SIMPLEX;
int thickness = 1;
float fontScale = 0.5;
int baseline = 0;
Scalar color(140, 199, 0);
使用cv::getTextSize获取文本区域大小并绘制底色矩形,显示检测框:
Rect box((int)tl_x, (int)tl_y, (int)(br_x - tl_x), (int)(br_y - tl_y));
rectangle(frame, box, color, 2, 8, 0);
cv::String label = format("face, score: %.2f", score);
cv::Size fontSize = ::getTextSize(label, fontface, fontScale, thickness, &baseline);
cv::rectangle(frame, cv::Size(box.tl().x, box.tl().y - fontSize.height - baseline),
cv::Size(box.tl().x + fontSize.width, box.tl().y), cv::Scalar(34, 43, 59), -1, 8);
putText(frame, label, Point(box.tl().x, box.tl().y-baseline), fontface, fontScale, Scalar(255, 0, 255), thickness, 8);
Pytho部分得代码,同样是分为两个部分,实现如下:
# 动态合理显示文本区域
font_color = (140,199,0)
cv.rectangle(canvas, (100, 100), (300, 300), font_color, 2, 8)
font = cv.FONT_HERSHEY_SIMPLEX
font_scale = 0.5
thickness = 1
# 显示部分
(fw, uph), dh = cv.getTextSize("OpenCV-Python", font, font_scale, thickness)
cv.rectangle(canvas, (100, 100-uph-dh), (100+fw, 100), (255, 255, 255), -1, 8)
cv.putText(canvas, "OpenCV-Python", (100, 100-dh), font, font_scale, (255, 0, 255), thickness)
cv.imshow("canvas", canvas)
cv.waitKey(0)
推荐阅读
OpenCV4.8+YOLOv8对象检测C++推理演示
ZXING+OpenCV打造开源条码检测应用
攻略 | 学习深度学习只需要三个月的好方法
三行代码实现 TensorRT8.6 C++ 深度学习模型部署
实战 | YOLOv8+OpenCV 实现DM码定位检测与解析
对象检测边界框损失 – 从IOU到ProbIOU
初学者必看 | 学习深度学习的五个误区