opencv學習之路(4)、Mat類介紹,基本繪圖函數


一、Mat類創建

    Mat img;//創建無初始化矩陣
    Mat img1(200,100,CV_8UC1);//200行,100列(長200,寬100)
    Mat img2(Size(200,100),CV_8UC3,Scalar(0,255,0));//長100,寬200
    Mat img3(200,100,CV_8UC3,Scalar(0,255,0));//創建200行,100列的8位三通道矩陣
    Mat img4(200,100,CV_8UC1,Scalar(255));//創建單通道矩陣    

 1 #include <opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 void main(){
 5     Mat img1=imread("E://1.jpg");
 6     Mat img2(img1);
 7     Mat img3=img1;
 8     Mat img4=img1.clone();
 9     Mat img5;
10     img1.copyTo(img5);
11 
12     cvtColor(img1,img1,CV_BGR2HSV);//BGR圖轉為HSV圖
13     imshow("img1",img1);
14     imshow("img2",img2);
15     imshow("img3",img3);//image1/2/3跟隨原圖變化
16     imshow("img4",img4);
17     imshow("img5",img5);//image4/5不會跟隨原圖變化
18     waitKey(0);
19 }

二、基本繪圖函數

1、畫線、畫圓、畫矩形

 1 #include <opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 void main(){
 5     Mat img(500,400,CV_8UC3,Scalar(255,255,255));//創建一個500行400列,3通道(即彩色圖)的白色圖
 6     line(img,Point(10,10),Point(100,250),Scalar(0,255,255),20,8);//在img圖中畫一條黃線,線寬為20,線型為8聯通(一般都設置為8)
 7     circle(img,Point(200,100),50,Scalar(0,255,255),15,8);   //以(200,100)為圓心,半徑為50,線寬為15畫空心圓
 8     circle(img,Point(200,250),50,Scalar(0,255,255),-1,8);   //設置為-1時,畫實心圓
 9     rectangle(img,Point(10,100),Point(200,200),Scalar(0,0,255),1,8);   //傳入坐上、右下角坐標,畫空心矩形
10     rectangle(img,Rect(200,300,100,50),Scalar(0,255,0),-1,8); //傳矩形數據(左上角坐標(200,300)和寬100,高50),畫實心綠色矩形
11 
12     imshow("drawing",img);
13     waitKey(0);
14 }

2、畫橢圓、畫多邊形、寫入文字

 1 #include <opencv2/opencv.hpp>
 2 using namespace cv;
 3 
 4 void main(){
 5     Mat img(600,650,CV_8UC3,Scalar(255,255,255));
 6     ellipse(img,Point(200,200),Size(180,80),15,0,360,Scalar(0,255,255),10,8);   //畫橢圓,(200,200)為中點,15旋轉角度,0~360度,長軸180,短軸80
 7     ellipse(img,RotatedRect(Point(350,350),Size(150,100),40),Scalar(0,255,0),-1,8);   //畫橢圓,40旋轉角度
 8     
 9     Point ppt[]={Point(120,50),Point(180,50),Point(210,100),Point(180,150),Point(120,150),Point(90,100)};
10     Point ppt2[]={Point(80,400),Point(80,550),Point(250,500),Point(300,550)};//定義點集
11     const Point* pts[]={ppt};
12     const Point* pts2[]={ppt2};
13     int npt[]={6};
14     int npt2[]={4};
15     fillPoly(img,pts,npt,1,Scalar(255,255,0),8);   //畫填充多邊形
16     polylines(img,pts2,npt2,1,false,Scalar(0,100,200),2,8);   //畫多邊形,false為不閉合,true為閉合
17     
18     putText(img,"China",Point(400,400),CV_FONT_BLACK,2,Scalar(100,100,100),5,8);//寫入文字
19 
20     imshow("drawing",img);
21     waitKey(0);
22 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM