【OpenCV画图】
各函数
demo代码
#include<bits/stdc++.h>
#include<opencv2/opencv.hpp>
using namespace std;
#define WINDOW_NAME1 "【绘制图1】"
#define WINDOW_NAME2 "【绘制图2】"
#define WINDOW_WIDTH 600
//画椭圆
void DrawEllipse(cv::Mat img,double angle){
int thickness=2;
int lineType=8;
cv::ellipse(img,cv::Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2),cv::Size(WINDOW_WIDTH/4,WINDOW_WIDTH/16),
angle,0,360,cv::Scalar(255,129,0),thickness,lineType);
}
//实心圆
void DrawFilledCircle(cv::Mat img,cv::Point center){
int thickness=-1;//线粗为-1:实心
int lineType=8;
cv::circle(img,center,WINDOW_WIDTH/32,cv::Scalar(0,0,255),thickness,lineType);
}
//凹多边形
void DrawPolygon(cv::Mat img){
int lineType=8;
//创建一些点
cv::Point rookPoints[1][20];
rookPoints[0][0]=cv::Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rookPoints[0][1]=cv::Point(3*WINDOW_WIDTH/4,7*WINDOW_WIDTH/8);
rookPoints[0][2]=cv::Point(3*WINDOW_WIDTH/4,13*WINDOW_WIDTH/16);
rookPoints[0][3]=cv::Point(11*WINDOW_WIDTH/16,13*WINDOW_WIDTH/16);
rookPoints[0][4]=cv::Point(19*WINDOW_WIDTH/32,3*WINDOW_WIDTH/8);
rookPoints[0][5]=cv::Point(3*WINDOW_WIDTH/4,13*WINDOW_WIDTH/8);
rookPoints[0][6]=cv::Point(3*WINDOW_WIDTH/4,WINDOW_WIDTH/8);
rookPoints[0][7]=cv::Point(26*WINDOW_WIDTH/40,WINDOW_WIDTH/8);
rookPoints[0][8]=cv::Point(26*WINDOW_WIDTH/40,WINDOW_WIDTH/4);
rookPoints[0][9]=cv::Point(22*WINDOW_WIDTH/40,WINDOW_WIDTH/4);
rookPoints[0][10]=cv::Point(22*WINDOW_WIDTH/40,WINDOW_WIDTH/8);
rookPoints[0][11]=cv::Point(18*WINDOW_WIDTH/40,WINDOW_WIDTH/8);
rookPoints[0][12]=cv::Point(18*WINDOW_WIDTH/40,WINDOW_WIDTH/4);
rookPoints[0][13]=cv::Point(14*WINDOW_WIDTH/40,WINDOW_WIDTH/4);
rookPoints[0][14]=cv::Point(14*WINDOW_WIDTH/40,WINDOW_WIDTH/8);
rookPoints[0][15]=cv::Point(WINDOW_WIDTH/4,WINDOW_WIDTH/8);
rookPoints[0][16]=cv::Point(WINDOW_WIDTH/4,3*WINDOW_WIDTH/8);
rookPoints[0][17]=cv::Point(13*WINDOW_WIDTH/32,3*WINDOW_WIDTH/8);
rookPoints[0][18]=cv::Point(5*WINDOW_WIDTH/16,13*WINDOW_WIDTH/16);
rookPoints[0][19]=cv::Point(WINDOW_WIDTH/4,13*WINDOW_WIDTH/16);
const cv::Point *ppt[1]={rookPoints[0]};
int npt[]={20};
//将多边形画到图像上
cv::fillPoly(img,ppt,npt,1,cv::Scalar(255,255,255),lineType);
}
//画线
void DrawLine(cv::Mat img,cv::Point start,cv::Point end){
int thickness=2;
int lineType=8;
cv::line(img,start,end,cv::Scalar(0,0,0),thickness,lineType);
}
int main(){
cv::Mat atomImage=cv::Mat::zeros(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3);
cv::Mat rookImage=cv::Mat::zeros(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3);
//第一副图
DrawEllipse(atomImage,90);
DrawEllipse(atomImage,0);
DrawEllipse(atomImage,45);
DrawEllipse(atomImage,-45);
DrawFilledCircle(atomImage,cv::Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2));
//第二副图
DrawPolygon(rookImage);
cv::rectangle(rookImage,cv::Point(0,7*WINDOW_WIDTH/8),cv::Point(WINDOW_WIDTH,WINDOW_WIDTH),cv::Scalar(0,255,255),-1,8);
//绘制线段
DrawLine(rookImage,cv::Point(0,15*WINDOW_WIDTH/16),cv::Point(WINDOW_WIDTH,15*WINDOW_WIDTH/16));
DrawLine(rookImage,cv::Point(WINDOW_WIDTH/4,7*WINDOW_WIDTH/8),cv::Point(WINDOW_WIDTH/4,WINDOW_WIDTH));
DrawLine(rookImage,cv::Point(WINDOW_WIDTH/2,7*WINDOW_WIDTH/8),cv::Point(WINDOW_WIDTH/2,WINDOW_WIDTH));
DrawLine(rookImage,cv::Point(3*WINDOW_WIDTH/4,7*WINDOW_WIDTH/8),cv::Point(3*WINDOW_WIDTH/4,WINDOW_WIDTH));
cv::imshow(WINDOW_NAME1,atomImage);
cv::moveWindow(WINDOW_NAME1,0,200);
cv::imshow(WINDOW_NAME2,rookImage);
cv::moveWindow(WINDOW_NAME2,WINDOW_WIDTH,200);
cv::waitKey(0);
return 0;
}