📜  在C ++中使用openCV在图像上书写(1)

📅  最后修改于: 2023-12-03 14:51:14.593000             🧑  作者: Mango

在C++中使用OpenCV在图像上书写

OpenCV是一个流行的计算机视觉库,可用于处理图像和视频。本文将介绍如何在C++中使用OpenCV在图像上进行书写和绘制。

安装OpenCV

首先需要安装OpenCV。可参考官方文档或其他教程进行安装。

在Ubuntu上的安装方法:

$ sudo apt-get install libopencv-dev

在Windows上安装方法可以参考如下视频:安装OpenCV 3.0.0及配置环境变量(Windows7)

创建图像

接下来创建一个黑色的空白图像。使用OpenCV创建图像的方法如下:

cv::Mat image = cv::Mat::zeros(height, width, CV_8UC3);

其中,heightwidth表示图像的高度和宽度,CV_8UC3代表3个8位无符号整数通道(BGR)。你也可以使用其他的参数组合来创建不同类型的图像。

在图像上书写文本

OpenCV提供了多种在图像上书写文本的方法。最常用的方法是使用putText函数。putText函数语法如下:

void cv::putText(InputOutputArray img, const String& text, Point org, int fontFace, double fontScale, Scalar color, int thickness = 1, int lineType = LINE_8, bool bottomLeftOrigin = false);
  • img - 要写入文本的图像
  • text - 要写入的文本
  • org - 文本左下角的起始位置
  • fontFace - 字体类型,如cv::FONT_HERSHEY_SIMPLEX
  • fontScale - 字体缩放因子
  • color - 字体颜色
  • thickness - 字体线条粗细, 默认值为1
  • lineType - 线条类型,默认值为LINE_8
  • bottomLeftOrigin - 是否使用左下角作为起始点

下面是一个示例:

cv::putText(image, "Hello World!", cv::Point(50, 50), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255), 2);

这将在图像左上角写入“Hello World!”文本。

在图像上绘制形状

除了书写文本,OpenCV还可以绘制多种形状,例如线条、矩形、圆形等等。最常用的方法是使用linerectanglecircle函数。

void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
void cv::rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);
void cv::circle(InputOutputArray img, Point center, int radius, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0);

line函数绘制一条线段,rectangle函数绘制一个矩形,circle函数绘制一个圆形。

下面是一个示例:

cv::line(image, cv::Point(0, 0), cv::Point(100, 100), cv::Scalar(255, 0, 0), 2);
cv::rectangle(image, cv::Point(50, 50), cv::Point(150, 150), cv::Scalar(0, 255, 0), 2);
cv::circle(image, cv::Point(200, 200), 50, cv::Scalar(0, 0, 255), 2);

这将在图像上绘制一条蓝色的线段,一个绿色的矩形和一个红色的圆形。

显示图像

完成绘制后,可以使用imshow函数将图像显示在屏幕上。

cv::imshow("image", image);
cv::waitKey(0);

其中,imshow函数需要两个参数,第一个参数是窗口的名称,第二个参数是要显示的图像。waitKey函数用于等待用户按下键盘上的任意键,当等待时间为0时,程序将在用户按下键盘上的任意键之前一直等待。这是因为在许多的GUI上,OpenCV在“closing”窗口之前的快速建议。

总结

本文介绍了如何在C++中使用OpenCV在图像上书写文本以及绘制多种形状。虽然这只是OpenCV的简单用例,但它可以演示OpenCV可以轻松地完成的一些常见任务。

完整示例代码如下:

#include <opencv2/opencv.hpp>

int main()
{
    cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
    cv::putText(image, "Hello World!", cv::Point(50, 50), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 0, 255), 2);
    cv::line(image, cv::Point(0, 0), cv::Point(100, 100), cv::Scalar(255, 0, 0), 2);
    cv::rectangle(image, cv::Point(50, 50), cv::Point(150, 150), cv::Scalar(0, 255, 0), 2);
    cv::circle(image, cv::Point(200, 200), 50, cv::Scalar(0, 0, 255), 2);
    cv::imshow("image", image);
    cv::waitKey(0);
    return 0;
}