绘制形状和文字
- 使用从cv::Point与cv::Scalar
- 绘制线、矩形、圆、椭圆等基本几何形状
- 随机生成与绘制文本
使用cv::Point与cv::Scalar
- Point表示2D平面上一个点x,y
Point p;
p.x = 10;
p.y = 8;
or
p = Point(10,8);
- Scalar表示四个元素的向量
Scalar(a,b,c);//a = blue,b = green,c = red表示RGB三个通道
绘制线、矩形、圆、椭圆等基本几何形状
- 画线cv::line(LINE_4\LINE_8\LINE_AA) //AA代表反锯齿
- 画椭圆cv::ellipse
- 画矩形cv::rectangle
- 画填充cv::fillPoly
- 画圆cv::circle
代码演示
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
//定义全局
Mat bgImage;
const char* drawdemo_win = "draw shapes and text demo";
//画线段
void MyLines();
//画矩形
void MyRectangle();
//画椭圆
void MyEllipse();
//画圆
void MyCircle();
//画多边形
void MyPolygon();
//随机线段随机颜色
void RandomLineDemo();
int main(int argc,char* argv)
{
bgImage = imread("C:/Users/26444/Desktop/testopencvinstall/OIP.jpg");
if(bgImage.empty())
{
cout << "could not load image....."<< endl;
return -1;
}
//画线段
MyLines();
//画矩形
MyRectangle();
//画椭圆
MyEllipse();
//画圆
MyCircle();
//画多边形
MyPolygon();
putText(bgImage,"Hello Opencv",Point(((bgImage.cols/2)/2),(bgImage.rows/2)),FONT_HERSHEY_COMPLEX,1.0,Scalar(12,255,200),1,LINE_8);
namedWindow("drawdemo_win",WINDOW_AUTOSIZE);
imshow("RandomLine",bgImage);
waitKey(0);
return 0;
}
void MyLine()
{
Point p1 = Point(20,30);
Point p2;
p2.x = 150;
p2.y = 150;
Scalar color = Scalar(0,0,255);
line(bgImage,p1,p2,color,1,LINE_8);
}
void MyRectangle()
{
Rect rect = Rect(200,200,200,200);
Scalar color = Scalar(255,0,0);
rectangle(bgImage,rect,color,1,LINE_8);
}
void MyEllipse()
{
Scalar color = Scalar(0,255,0);
ellipse(bgImage,Point(bgImage.cols/2,bgImage.rows/2),Size(bgImage.cols/4,bgImage.rows/8),90,0,360,color,2,LINE_8);
}
void MyCircle()
{
Scalar color = Scalar(0,255,255);
Point center = Point(bgImage.cols/2,bgImage.rows/2);
circle(bgImage,center,150,color,2,LINE_8);
}
void MyPolygon()
{
Point pts[1][5];
pts[0][0] = Point(100,100);
pts[0][1] = Point(100,200);
pts[0][2] = Point(200,200);
pts[0][3] = Point(200,100);
pts[0][4] = Point(100,100);
const Point* ppts[] = {pts[0]};
int npt[] = {5};
Scalar color = Scalar(255,12,255);
fillPoly(bgImage,ppts,npt,1,color,LINE_8);
}
void RandomLineDemo()
{
RNG rng(12345);
Point pt1;
Point pt2;
Mat bg = Mat::zeros(bgImage.size(),bgImage.type());
namedWindow("random line demo",WINDOW_AUTOSIZE);
for(int 1 = 0;i < 100000;1++)
{
pt1.x = rng.uniform(0,bgImage.cols);
pt2.x = rng.uniform(0,bgImage.cols);
pt1.y = rng.uniform(0,bgImage.rows);
pt2.y = rng.uniform(0,bgImage.rows);
Scalar color = Scalar(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));
if(waitKey(50) > 0)
{
break;
}
line(bg,pt1,pt2,color,1,LINE_8);
imshow("random line demo",bg);
}
}
图片演示