在图像处理的过程中,我们有时需要在图像或者视频上画上一些图案或者绘上一些文字。OpenCV中提供了各种功能的绘图函数,使用这些函数,我们可以在图像上绘制直线、矩形、圆、椭圆、多边形等等。
1、cv::circle()
cv::circle()是OpenCV在图像上绘制圆的函数,调用形式如下:
void circle(cv::Mat& img, // 待绘制的图像cv::Point center, // 圆心位置int radius, // 圆的半径const cv::Scalar& color, // 线条的颜色(RGB)int thickness = 1, // 线宽int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);
2、cv::clipLine()
cv::clipLine()是判断一条直线是否在某个矩形内,有以下两种形式:
bool clipLine( // 如果直线line任何一部分在矩形 'imgRect'内,则返回truecv::Rect imgRect, // 要穿过的矩形cv::Point& pt1, // 直线的第一个端点cv::Point& pt2 // 直线的第二个端点);bool clipLine( // 如果直线line任何一部分在图像大小Size内,则返回truecv::Size imgSize, // 图像的大小,相当于矩形的端点在(0,0)cv::Point& pt1, // 直线的第一个端点cv::Point& pt2 // 直线的第二个端点);
3、cv::ellipse()
cv::ellipse()是绘制椭圆和椭圆弧线(部分椭圆)的函数,有以下两种形式:
bool ellipse(cv::Mat& img, // 待绘制的图像cv::Point center, // 椭圆中心cv::Size axes, // 椭圆长轴和短轴的长度double angle, // 长轴倾角double startAngle, // 弧度绘制的起始角度double endAngle, // 弧度绘制的const cv::Scalar& color, // 线条的颜色(RGB)int thickness = 1, // 线宽int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);bool ellipse(cv::Mat& img, // 待绘制的图像const cv::RotatedRect& rect, // 椭圆的外切矩形const cv::Scalar& color, // 线条的颜色(RGB)int thickness = 1, // 线宽int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);
4、cv::fillConvexPoly()
cv::fillConvexPoly()用于绘制封闭多边形,注意:输入的多边形不能出现交叉,否则会出错。具体形式如下:
void fillConvexPoly(cv::Mat& img, // 待绘制的图像const cv::Point* pts, // c风格的点序列int npts, // 'pts'中点的数目const cv::Scalar& color, // 线条的颜色(RGB)int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);
5、cv::fillPoly()
cv::fillPoly()用于绘制任意数目的封闭多边形。多边形可以出现交叉。具体形式如下:
void fillPoly(cv::Mat& img, // 待绘制的图像const cv::Point** pts, // c风格的点序列的序列int* npts, // 'pts[i]'中点的数目int ncontours, // 'pts'中的序列数const cv::Scalar& color, // 线条的颜色(RGB)int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0, // 偏移量cv::Point offset = Point() // 整体偏移量);
6、cv::line()
cv::line()用于直线的绘制,具体形式如下:
void line(cv::Mat& img, // 待绘制的图像cv::Point pt1, // 直线的第一个端点cv::Point pt2 // 直线的第二个端点const cv::Scalar& color, // 线条的颜色(RGB)int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);
7、cv::rectangle()
cv::rectangle()用于矩形的绘制,有以下两种形式:
void rectangle(cv::Mat& img, // 待绘制的图像cv::Point pt1, // 矩形的第一个顶点cv::Point pt2 // 矩形的对角顶点const cv::Scalar& color, // 线条的颜色(RGB)int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);void rectangle(cv::Mat& img, // 待绘制的图像cv::Rect r, // 待绘制的矩形const cv::Scalar& color, // 线条的颜色(RGB)int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);
8、cv::polyLines()
cv::polyLines()用于绘制非封闭多边形(即折线),具体形式如下:
void polyLines(cv::Mat& img, // 待绘制的图像const cv::Point** pts, // c风格的点序列的序列int* npts, // 'pts[i]'中点的数目int ncontours, // 'pts'中的序列数bool isClosed, // 如果是true, 则连接首尾两点const cv::Scalar& color, // 线条的颜色(RGB)int lineType = 8, // 线型(4邻域或8邻域,默认8邻域)int shift = 0 // 偏移量);
.03.30