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;
}