1. 程式人生 > >OpenCV: 畫框和矩形

OpenCV: 畫框和矩形

本文主要內容:

一、介紹OpenCV中三個繪圖函式:circle() 、ellipse()  、rectangle()

1.Circle

繪製圓形。

void cvCircle( CvArr* img, CvPoint center, int radius, CvScalar color,
               int thickness=1, int line_type=8, int shift=0 );

img :影象。

center :圓心座標。

radius : 圓形的半徑。

color : 線條的顏色。

thickness : 如果是正數,表示組成圓的線條的粗細程度。否則,表示圓是否被填充。

line_type ; 線條的型別。見 cvLine 的描述

shift ; 圓心座標點和半徑值的小數點位數。

函式cvCircle繪製或填充一個給定圓心和半徑的圓。圓被感興趣矩形所裁剪。 若指定圓的顏色,可以使用巨集 CV_RGB ( r, g, b )。

#include<opencv2/core/core.hpp> //包含程式所使用的標頭檔案和名稱空間

#include<opencv2/highgui/highgui.hpp>

#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

#define Win_Name2 "Audi 奧迪"

int main(int argc, char** argv)

{

//繪製奧迪Audi車標

Mat image2 = Mat::zeros(600, 850, CV_8UC3);//生成一個850x600的視窗

circle(image2, Point(200, 300), 100, Scalar(225, 0, 225), 7, 8);//繪製第一個圓,半徑為100,圓心(200,300),顏色為紫色

circle(image2, Point(350, 300), 100, Scalar(225, 0, 225), 7, 8);//繪製第一個圓,半徑為100,圓心(350,300),線寬為7

circle(image2, Point(500, 300), 100, Scalar(225, 0, 225), 7, 8);//繪製第一個圓,半徑為100,圓心(500,300)

circle(image2, Point(650, 300), 100, Scalar(225, 0, 225), 7, 8);//繪製第一個圓,半徑為100,圓心(650,300)

imshow(Win_Name2, image2);

waitKey();

return 0;

}

2.Ellipse

繪製橢圓圓弧和橢圓扇形。

void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,
                double start_angle, double end_angle, CvScalar color,
                int thickness=1, int line_type=8, int shift=0 );

img; 影象。

center : 橢圓圓心座標。

axes : 軸的長度。

angle; 偏轉的角度。

start_angle : 圓弧起始角的角度。.

end_angle; 圓弧終結角的角度。

color : 線條的顏色。

thickness : 線條的粗細程度。

line_type ; 線條的型別,見CVLINE的描述。

shift ; 圓心座標點和數軸的精度。

函式cvEllipse用來繪製或者填充一個簡單的橢圓弧或橢圓扇形。圓弧被ROI矩形所忽略。反走樣弧線和粗弧線使用線性分段近似值。所有的角都是以角度的形式給定的。

//----------------基本幾何影象的繪製---------------

//包含程式所使用的標頭檔案和名稱空間

#include<opencv2/core/core.hpp>

#include<opencv2/highgui/highgui.hpp>

#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

#define Win_Name1 "Toyota 豐田" <span style="font-size: 13.3000001907349px; font-family: Tahoma, 'Lucida Grande', Verdana, Helvetica, Arial, sans-serif;">//巨集定義部分</span>

//main函式

int main(int argc, char** argv)

{

//繪製豐田車標

Mat image1 = Mat::zeros(900, 900, CV_8UC3);//900x900的視窗

ellipse(image1, Point(450, 450), Size(400, 250), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//繪製第一個橢圓,大橢圓,顏色為紅色

ellipse(image1, Point(450, 450), Size(250, 110), 90, 0, 360, Scalar(0, 0, 225), 5, 8);//繪製第二個橢圓,豎橢圓

ellipse(image1, Point(450, 320), Size(280, 120), 0, 0, 360, Scalar(0, 0, 225), 5, 8);//繪製第三個橢圓,小橢圓(橫)

imshow(Win_Name1, image1);

waitKey();

return 0;

}

3.Rectangle

繪製簡單、指定粗細或者帶填充的 矩形

void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
                  int thickness=1, int line_type=8, int shift=0 );

img : 影象.

pt1; 矩形的一個頂點。

pt2 ; 矩形對角線上的另一個頂點

color; 線條顏色 (RGB) 或亮度(灰度影象 )(grayscale image)。

thickness : 組成矩形的線條的粗細程度。取負值時(如 CV_FILLED)函式繪製填充了色彩的矩形。

line_type; 線條的型別。見cvLine的描述

shift ; 座標點的小數點位數。 

函式 cvRectangle 通過對角線上的兩個頂點繪製矩形。

//包含程式所使用的標頭檔案和名稱空間

#include<opencv2/core/core.hpp>

#include<opencv2/highgui/highgui.hpp>

#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

//巨集定義部分

#define Win_Name3 "Cross 紅十字"

//main函式

int main(int argc,char** argv)

{

<span style="white-space:pre"> </span>//繪製紅十字

Mat image3 = Mat::zeros(800, 800, CV_8UC3);//生成一個800x800的視窗

Rect rec1 = Rect(100, 300, 600, 200);

Rect rec2 = Rect(300, 100, 200, 600);

rectangle (image3, rec1,Scalar(0, 0, 255), -1, 8, 0);//橫矩形

rectangle (image3, rec2, Scalar(0, 0, 255), -1, 8, 0);//豎矩形

rectangle (image3, Point(100, 300), Point(700, 500), Scalar(0, 255, 255), 2, 8, 0);//黃色矩形鑲邊

rectangle(image3, Point(300, 100), Point(500, 700), Scalar(0, 255, 255), 2, 8, 0);//黃色矩形鑲邊

rectangle(image3, Point(300, 300), Point(500, 500), Scalar(0, 0, 255), 3, 8);//紅色正方形覆蓋(中央)

imshow(Win_Name3, image3);

waitKey();

return 0;

}