OpenCV 绘制图形

Posted AI异构

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV 绘制图形相关的知识,希望对你有一定的参考价值。

OpenCV绘制图形

直线

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           ////点坐标中小数位数
)

椭圆

void cv::ellipse    (
InputOutputArray    img,      //图像
Point   center,               //椭圆中心
Size    axes,                 //椭圆长半轴和短半轴
double  angle,                //椭圆的旋转角度
double  startAngle,           //椭圆弧的起始角
double  endAngle,             //椭圆弧的结束角
const Scalar &  color,        //线的颜色
int     thickness = 1,        //如果是正数,则为线的粗细,如果为负数则填充椭圆的内部
int     lineType = LINE_8,    //线的类型
int     shift = 0             //中心坐标和半轴的小数位数
)

多边形

void cv::polylines  (
InputOutputArray    img,    //图像
InputArrayOfArrays  pts,    //点集
bool    isClosed,           //true为闭合,最后一个点和第一个点连起来
const Scalar &  color,      //线的颜色
int     thickness = 1,      //线的粗细
int     lineType = LINE_8,  //线的类型
int     shift = 0           //点的坐标精度
)

注:polylines() 函数是用来画折线的,如果输入的点集是多边形的顶点集合,isClosed=true 就可以绘制多边形

文字

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     //当TRUE时,图像原点位于左下角。否则,它在左上角
)

参考代码

#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>

using namespace cv;
using namespace std;

int main()
{
   // 绘制直线
   Mat lineImage(Size(300, 300), CV_8UC3, Scalar(0));
   Point p1 = Point(60, 50);
   Point p2 = Point(250, 200);
   namedWindow("line", CV_WINDOW_AUTOSIZE);
   line(lineImage, p1, p2, CV_RGB(255, 0, 0), 1);
   imshow("line", lineImage);
   imwrite("./line.jpg",lineImage);
   // 绘制矩形
   Mat rectangleImage(Size(300, 300), CV_8UC3, Scalar(0));
   Point rec_p1 = Point(60, 50);
   Point rec_p2 = Point(250, 200);
   rectangle(rectangleImage, rec_p1, rec_p2, CV_RGB(255, 0, 0), 1);
   imshow("rectangle", rectangleImage);
   imwrite("./rectangle.jpg",rectangleImage);
   // 绘制圆形
   Mat circleImage(Size(300, 300), CV_8UC3, Scalar(0));
   Point circle_center = Point(150, 150);
   int circle_radius = 80;
   circle(circleImage, circle_center, circle_radius, Scalar(255, 0, 0), 2);    //Scalar( (b), (g), (r), 0 )
   imshow("circle", circleImage);
   imwrite("./circle.jpg",circleImage);
   // 绘制椭圆
   Mat ellipseImage(Size(300, 300), CV_8UC3, Scalar(0));
   Point center = Point(150, 150);
   Size axes = Size(150, 80);
   double  angle = 4;
   ellipse(ellipseImage, center, axes, angle, 0,360,Scalar(0, 0, 255), 1, LINE_AA);
   imshow("ellipse", ellipseImage);
   imwrite("./ellipse.jpg",ellipseImage);
   // 绘制多边形
   Mat polylinesImage(Size(300, 300), CV_8UC3, Scalar(0));
   vector<Point> pt;
   pt.push_back ( Point(50, 50) );
   pt.push_back ( Point(50, 120) );
   pt.push_back ( Point(90, 100) );
   pt.push_back ( Point(140, 240) );
   pt.push_back ( Point(240, 130) );
   polylines(polylinesImage ,pt ,1, CV_RGB(0, 255, 0), 2);
   imshow("polylines", polylinesImage);
   imwrite("./polylines.jpg",polylinesImage);
   // 绘制文字
   Mat putTextImage(Size(300, 300), CV_8UC3, Scalar(0));
   string str = "Hello OpenCV";
   putText(putTextImage, str,Point(20,150), FONT_HERSHEY_SIMPLEX,1, Scalar(0, 0, 255), 1, LINE_AA);
   imshow("Text", putTextImage);
   imwrite("./Text.jpg",putTextImage);

   waitKey();
   return 0;
}

结果

参考

[【OpenCV3图像处理】绘图功能总结(直线,矩形,圆,椭圆,多边形,文字)]https://blog.csdn.net/u011574296/article/details/73332523


-长按关注-


以上是关于OpenCV 绘制图形的主要内容,如果未能解决你的问题,请参考以下文章

基本图形绘制

python-openCV 绘制图形

OpenCV基础---图形绘制

OpenCV-Python实战——OpenCV中绘制图形与文本(万字总结,️❤️建议收藏️❤️)

OpenCV 绘制图形

opencv:图形绘制与填充