OpenCV探索之路(十四):繪制點、直線、幾何圖形


繪制點和圓

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:圓心坐標點和半徑值的小數點位數。

畫圓畫點都是使用circle()函數來畫,點就是圓,我們平常所說的圓只不過是半徑大一點而已。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

//畫圓畫點都是使用circle()函數來畫,點就是圓,我們平常所說的圓只不過是半徑大一點而已。
int main()
{
	Mat img = imread("lol16.jpg");	

	//畫空心點
	Point p(20, 20);//初始化點坐標為(20,20)
	circle(img, p, 2, Scalar(0, 255, 0)); //第三個參數表示點的半徑,第四個參數選擇顏色。這樣子我們就畫出了綠色的空心點

	//這種初始化點的方式也可以
	Point p2;
	p2.x = 100;
	p2.y = 100;
	//畫實心點
	circle(img, p2, 3,Scalar(255,0,0),-1); //第五個參數我設為-1,表明這是個實點。

	//畫空心圓
	Point p3(300, 300);
	circle(img,p3,100,Scalar(0,0,255),3);//第五個參數我們調高點,讓線更粗

	//畫實心圓
	Point p4;
	p4.x = 600;
	p4.y = 600;
	circle(img, p4, 100, Scalar(120, 120, 120), - 1);

	imshow("畫點畫圓", img);

	waitKey();
	return 0;
}

繪制橢圓

void ellipse(Mat& img, Point center,Size axes, double angle, double startAngle, double endAngle, const Scalar& color,int thickness=1, int lineType=8, int shift=0)

  • img:圖像。
  • center:橢圓圓心坐標。
  • axes:軸的長度。
  • angle:偏轉的角度。
  • start_angle:圓弧起始角的角度。
  • end_angle:圓弧終結角的角度。
  • color:線條的顏色。
  • thickness:線條的粗細程度。
  • line_type:線條的類型,見CVLINE的描述。
  • shift:圓心坐標點和數軸的精度。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("lol16.jpg");	
	int thickness = 3;
	int lineType = 8;
	double angle = 30;  //橢圓旋轉角度
	//第三個參數Size中的兩個參數分別是橫軸長、縱軸長。
	//同理,thickness若是小於0,表示實心
	ellipse(img,Point(100, 100),Size(90, 60),angle,0,360,Scalar(255, 255, 0),thickness,lineType);

	imshow("畫橢圓", img);

	waitKey();
	return 0;
}

繪制矩形

 void rectangle(Mat& img,Rect rec, const Scalar&color, intthickness=1, intlineType=8,intshift=0 )

  • img:圖像。
  • rec:表征矩形的位置和長寬。
  • color:線條顏色 (RGB) 或亮度(灰度圖像 )(grayscale image)。
  • thickness:組成矩形的線條的粗細程度。取負值時(如CV_FILLED)函數繪制填充了色彩的矩形。
  • line_type:線條的類型。見cvLine的描述
  • shift:坐標點的小數點位數。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("lol16.jpg");	
	Rect r(250, 250, 120, 200);
	rectangle(img, r, Scalar(0, 255, 255), 3);

	imshow("畫矩形", img);

	waitKey();
	return 0;
}

繪制直線

void line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color,
                     int thickness = 1, int lineType = LINE_8, int shift = 0);

  • img:圖像.
  • pt1:線條起點.
  • pt2:線條終點.
  • color:線條顏色.
  • thickness:線條寬度.
  • lineType:線型
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
	Mat img = imread("lol16.jpg");	
	Point p1(100, 100);
	Point p2(758, 50);
	line(img, p1, p2, Scalar(33, 33, 133), 2);

	//畫第二條線
	line(img, Point(300, 300), Point(758, 300), Scalar(89, 90, 90), 3);

	imshow("畫矩形", img);

	waitKey();
	return 0;
}

最后來個綜合的圖形展示。

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

int main()
{
	Mat img = Mat::zeros(Size(800,600), CV_8UC3);
	img.setTo(255);
	Point p1(100, 100);
	Point p2(758, 50);
	line(img, p1, p2, Scalar(0, 0, 255), 2);
	line(img, Point(300, 300), Point(758, 400), Scalar(0, 255, 255), 3);

	Point p(20, 20);//初始化點坐標為(20,20)
	circle(img, p, 2, Scalar(0, 255, 0),-1);

	Point p4;
	p4.x = 600;
	p4.y = 600;
	circle(img, p4, 100, Scalar(120, 120, 120), -1);

	int thickness = 3;
	int lineType = 8;
	double angle = 30;  //橢圓旋轉角度
	ellipse(img, Point(100, 100), Size(90, 60), angle, 0, 360, Scalar(255, 255, 0), thickness, lineType);


	Rect r(250, 250, 120, 200);
	rectangle(img, r, Scalar(0, 255, 255), 3);
	imshow("大雜燴", img);

	waitKey();
	return 0;
}


免責聲明!

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



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