如何在OpenCV C++的cv::Mat上绘制填充文本?
解决OpenCV C++绘制填充文本的问题
你之前的错误在于把cv::FILLED传给了lineType参数,但实际上控制文本填充的是thickness参数,lineType仅负责线条的渲染方式(如抗锯齿),和文本填充无关。
正确实现方式
将putText的thickness参数设置为cv::FILLED,即可实现真正的文本填充(无边框,完全填充内部):
cv::putText(img, "TEST", cv::Point(50, 150), cv::FONT_HERSHEY_DUPLEX, 3, CV_RGB(255, 255, 255), cv::FILLED);
如果需要让文本边缘更平滑,可以添加cv::LINE_AA作为lineType参数开启抗锯齿:
cv::putText(img, "TEST", cv::Point(50, 150), cv::FONT_HERSHEY_DUPLEX, 3, CV_RGB(255, 255, 255), cv::FILLED, cv::LINE_AA);
完整示例代码
#include <opencv2/opencv.hpp> int main(){ cv::Mat img = cv::Mat::zeros(300, 300, CV_8UC3); // 绘制完全填充的文本,开启抗锯齿 cv::putText(img, "TEST", cv::Point(50, 150), cv::FONT_HERSHEY_DUPLEX, 3, CV_RGB(255, 255, 255), cv::FILLED, cv::LINE_AA); cv::imshow("test", img); cv::waitKey(0); return 0; }
关键参数说明
thickness: 当取值为cv::FILLED时,会填充文本的整个内部区域,替代默认的边框绘制行为。lineType: 使用cv::LINE_AA可以让文本边缘更柔和,避免锯齿感,不影响填充效果。
内容的提问来源于stack exchange,提问作者Runsva
相关产品推荐
相关产品推荐

