本文通过原理详解和示例说明,对cv::rectangle、cv::getTextSize、cv::putText、cv::Rect函数进行了详细的解读,有助于读者的理解和使用。

cv::Rect ()

cv::Rect 是 OpenCV 库中的一个数据结构,用于表示矩形区域。它包含四个属性:左上角坐标(x,y)和矩形的宽度、高度。

下面是 cv::Rect 的构造函数和使用示例:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    // 创建一个 cv::Rect 对象,指定左上角坐标 (50, 50) 和宽度、高度 (100, 100)
    Rect rect(50, 50, 100, 100);

    // 显示矩形区域的坐标和大小
    std::cout << "Rect: (" << rect.x << ", " << rect.y << "), Size: (" << rect.width << ", " << rect.height << ")" << std::endl;

    return 0;
}

在上面的示例中,我们使用 cv::Rect 的构造函数创建了一个矩形区域,其中左上角坐标为 (50, 50),宽度为 100,高度为 100。然后,我们通过访问 cv::Rect 对象的属性来获取矩形区域的坐标和大小,并将其打印到控制台上。
在这里插入图片描述

除了构造函数之外,cv::Rect 还提供了一些常用的方法,如 x、y、width 和 height,用于获取和设置矩形区域的属性。此外,还可以使用 cv::Rect 进行比较运算(如相等、包含)和数学运算(如加法、减法)。

cv::rectangle()

cv::rectangle() 是 OpenCV 库中的一个函数,用于在图像上绘制矩形。它接受以下参数:

img:输入图像,可以是彩色或灰度图像。
r:矩形的位置和大小。它是一个 cv::Rect 对象,包含左上角坐标(x,y)和宽度、高度。
color:矩形的颜色。通常使用 BGR 格式的 cv::Scalar 对象表示。
thickness:线条的厚度。如果为负数,则会填充矩形。
下面是一个示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat img = imread("image.jpg");
    if (img.empty())
    {
        std::cout << "Could not read the image." << std::endl;
        return -1;
    }

    Rect r(50, 50, 100, 100); // 定义矩形位置和大小
    Scalar color = Scalar(0, 255, 0); // 定义矩形颜色(绿色)
    int thickness = 2; // 定义线条粗细

    // 在图像上绘制矩形
    rectangle(img, r, color, thickness);

    // 显示图像
    imshow("Rectangle", img);
    waitKey(0);
    return 0;
}

在上面的示例中,我们首先读取一张图像,并检查是否成功读取。然后,我们定义一个 cv::Rect 对象来指定矩形的位置和大小。接着,我们使用 cv::Scalar 对象定义矩形的颜色(这里选择了绿色),并指定线条的粗细。最后,我们调用 cv::rectangle() 函数在图像上绘制矩形,并通过 imshow() 和 waitKey() 显示图像。

在这里插入图片描述

cv::putText()

cv::putText() 是 OpenCV 库中的一个函数,用于在图像上绘制文本。下面是函数的详细说明:

函数原型:

void cv::putText(Mat& img, const String& text, Point org, int fontFace, double fontScale, Scalar color, int thickness = 1, int lineType = 8, bool bottomLeftOrigin = false)

参数解释:

img:要在其上绘制文本的图像。
text:要绘制的文本字符串。
org:文本的起始位置。
fontFace:字体类型,可以使用 FONT_HERSHEY_SIMPLEX、FONT_HERSHEY_PLAIN、FONT_HERSHEY_DUPLEX 等常量。
fontScale:字体缩放比例。
color:文本颜色,可以使用 Scalar 对象表示。
thickness:线条粗细,默认为1。
lineType:线条类型,默认为8(实线)。
bottomLeftOrigin:是否按照左下角作为坐标原点,默认为false(左上角作为原点)。
示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;

int main()
{
    Mat image = imread("image.jpg");
    String text = "Hello, OpenCV!"; // 要绘制的文本字符串
    Point org(10, 50); // 文本起始位置
    Scalar color(0, 255, 0); // 文本颜色(BGR)
    int thickness = 2; // 线条粗细
    int fontFace = FONT_HERSHEY_SIMPLEX; // 字体类型
    double fontScale = 1; // 字体缩放比例

    // 在图像上绘制文本
    cv::putText(image, text, org, fontFace, fontScale, color, thickness);

    // 显示图像
    cv::imshow("Text Example", image);
    cv::imwrite("image1.jpg", image);
    cv::waitKey(0);
    return 0;
}

在上面的示例中,我们加载一幅图像,并定义了要绘制的文本字符串、起始位置、颜色、线条粗细、字体类型和字体缩放比例。然后,我们使用 cv::putText() 函数在图像上绘制文本。最后,我们显示图像并等待用户按下任意键退出程序。
在这里插入图片描述

cv::getTextSize()

cv::getTextSize() 函数用于计算文本在图像中的大小。它接受文本字符串、字体、字体大小、线条粗细等参数,并返回一个 cv::Size 对象,表示文本的宽度和高度。这个函数可以帮助我们确定文本在图像中的位置和大小,以便我们可以在正确的位置绘制文本。

示例代码:

#include <opencv2/opencv.hpp>
using namespace cv;

using namespace cv;


int main() {
    cv::Mat image = imread("image.jpg");
    cv::Scalar color(0, 0, 255);  // 设置颜色为红色
    int fontFace = cv::FONT_HERSHEY_SIMPLEX;  // 使用Hershey Simplex字体
    double fontScale = 1;  // 字体缩放比例为1
    int thickness = 2;  // 设置文本线的厚度为2
    std::string text = "Hello, OpenCV!";  // 需要测量大小的文本字符串

    // 获取文本大小
    cv::Size size = cv::getTextSize(text, fontFace, fontScale, thickness,NULL);
    std::cout << "Text size: (" << size.width << ", " << size.height << ")" << std::endl;  // 打印文本大小

    // 在图像上绘制文本
    cv::putText(image, text, cv::Point(100- size.width, 100- size.height), fontFace, fontScale, color, thickness);
    image.convertTo(image, CV_8U);  // 转换为8位无符号整数(即CV_8U)以显示图像
    cv::imshow("Image with text", image);  // 显示图像
    cv::waitKey(0);  // 等待用户按键,0表示无限等待
    cv::imwrite("image1.jpg", image);
    return 0;
}

在这里插入图片描述

在上面的示例中,我们通过cv::getTextSize()函数获得了相应的宽高尺寸,在把文本放上去的时候,结合Size的尺寸,结果如上图所示,一部分文字无法加在图像上。这就是Size设置大小和文本起始点的原因。

GitHub 加速计划 / opencv31 / opencv
77.39 K
55.71 K
下载
OpenCV: 开源计算机视觉库
最近提交(Master分支:3 个月前 )
7be5181b Fixed KLEIDICV_SOURCE_PATH handling for external KleidiCV 1 天前
c3ca3f4f - 2 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐