一、Mat类创建

    Mat img;//创建无初始化矩阵
Mat img1(,,CV_8UC1);//200行,100列(长200,宽100)
Mat img2(Size(,),CV_8UC3,Scalar(,,));//长100,宽200
Mat img3(,,CV_8UC3,Scalar(,,));//创建200行,100列的8位三通道矩阵
Mat img4(,,CV_8UC1,Scalar());//创建单通道矩阵

opencv学习之路(4)、Mat类介绍,基本绘图函数-LMLPHP

 #include <opencv2/opencv.hpp>
using namespace cv; void main(){
Mat img1=imread("E://1.jpg");
Mat img2(img1);
Mat img3=img1;
Mat img4=img1.clone();
Mat img5;
img1.copyTo(img5); cvtColor(img1,img1,CV_BGR2HSV);//BGR图转为HSV图
imshow("img1",img1);
imshow("img2",img2);
imshow("img3",img3);//image1/2/3跟随原图变化
imshow("img4",img4);
imshow("img5",img5);//image4/5不会跟随原图变化
waitKey();
}

opencv学习之路(4)、Mat类介绍,基本绘图函数-LMLPHP

二、基本绘图函数

1、画线、画圆、画矩形

 #include <opencv2/opencv.hpp>
using namespace cv; void main(){
Mat img(,,CV_8UC3,Scalar(,,));//创建一个500行400列,3通道(即彩色图)的白色图
line(img,Point(,),Point(,),Scalar(,,),,);//在img图中画一条黄线,线宽为20,线型为8联通(一般都设置为8)
circle(img,Point(,),,Scalar(,,),,); //以(200,100)为圆心,半径为50,线宽为15画空心圆
circle(img,Point(,),,Scalar(,,),-,); //设置为-1时,画实心圆
rectangle(img,Point(,),Point(,),Scalar(,,),,); //传入坐上、右下角坐标,画空心矩形
rectangle(img,Rect(,,,),Scalar(,,),-,); //传矩形数据(左上角坐标(200,300)和宽100,高50),画实心绿色矩形 imshow("drawing",img);
waitKey();
}

opencv学习之路(4)、Mat类介绍,基本绘图函数-LMLPHP

2、画椭圆、画多边形、写入文字

 #include <opencv2/opencv.hpp>
using namespace cv; void main(){
Mat img(,,CV_8UC3,Scalar(,,));
ellipse(img,Point(,),Size(,),,,,Scalar(,,),,); //画椭圆,(200,200)为中点,15旋转角度,0~360度,长轴180,短轴80
ellipse(img,RotatedRect(Point(,),Size(,),),Scalar(,,),-,); //画椭圆,40旋转角度 Point ppt[]={Point(,),Point(,),Point(,),Point(,),Point(,),Point(,)};
Point ppt2[]={Point(,),Point(,),Point(,),Point(,)};//定义点集
const Point* pts[]={ppt};
const Point* pts2[]={ppt2};
int npt[]={};
int npt2[]={};
fillPoly(img,pts,npt,,Scalar(,,),); //画填充多边形
polylines(img,pts2,npt2,,false,Scalar(,,),,); //画多边形,false为不闭合,true为闭合 putText(img,"China",Point(,),CV_FONT_BLACK,,Scalar(,,),,);//写入文字 imshow("drawing",img);
waitKey();
}

opencv学习之路(4)、Mat类介绍,基本绘图函数-LMLPHP

05-11 13:38