📅  最后修改于: 2023-12-03 14:51:14.593000             🧑  作者: Mango
OpenCV是一个流行的计算机视觉库,可用于处理图像和视频。本文将介绍如何在C++中使用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);
其中,height
和width
表示图像的高度和宽度,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
- 字体线条粗细, 默认值为1lineType
- 线条类型,默认值为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还可以绘制多种形状,例如线条、矩形、圆形等等。最常用的方法是使用line
、rectangle
和circle
函数。
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;
}