OpenCV C++记录(四):基本图形绘制与图像操作
图形绘制
line画线函数
1 | void cv::line(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, |
实例: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using namespace std;
using namespace cv;
int main(){
Mat img;
img.create(Size(800,600),CV_8UC3); //create构造,不会初始化数据为0
img.setTo(255); //必须手动初始化,创建一张800*600白底
//简单用法:三点两线
Point p1(100,100);
Point p2(200,200);
Point p3(400,600);
line(img,p1,p2,Scalar(0,0,255),2); //BGR,红线
line(img,p2,p3,Scalar(0,255,0),5); //绿线
//完整调用:
Point pd1(500,21);
Point pd2(100,510);
line(img,pd1,pd2,Scalar(255,0,0),2,LINE_8,0); //蓝线
line(img,pd1,pd2,Scalar(255,255,0),2,LINE_8,1); //缩放青线
//显示坐标
string pd1text = "("+to_string(pd1.x)+","+to_string(pd1.y)+")";
string pd2text = "("+to_string(pd2.x)+","+to_string(pd2.y)+")";
putText(img,pd1text,pd1,FONT_HERSHEY_SIMPLEX,0.5,Scalar(255,0,0)); //类型FONT_HERSHEY_SIMPLEX
putText(img,pd2text,pd2,FONT_HERSHEY_SIMPLEX,1,Scalar(255,0,0));
imshow("raw",img);
waitKey(0);
destroyAllWindows();
return 0;
}
效果:
circle画圆函数
1 | // void cv::circle(InputOutputArray img, Point center, int radius, |
效果:
rectangle画矩形函数
1 | void rectangle(cv::InputOutputArray img, cv::Rect rec, const cv::Scalar &color, |
ellipse画椭圆函数
ellipse存在重载版本,可从椭圆本身的定义(中心点、ab轴长、旋转角度)出发:
1
2
3
4
5
6
7
8
9void cv::ellipse(InputOutputArray img, Point center, Size axes, double angle,
double startAngle, double endAngle, const Scalar& color,
int thickness = 1, int lineType = LINE_8, int shift = 0)
//例子:
Point p(100,50);
circle(img,p,1,Scalar(0,0,255),3); //绘图:假装中心点
//ellipse:中心点p,半长轴a长度100,半短轴b长度50,旋转角度0、起始角度0,终止角度270°
ellipse(img,p,Size(100,50),0,0,270,Scalar(0,0,255)); RotatedRect
,它和前文提到的Rect
不同,它接受的参数是矩形中心点、长度、高度以及旋转角度,以绘制带旋转角度的矩形,通过这个矩形可内接椭圆:
1
2
3
4
5
6
7
8
9//第二个重载版本:
void ellipse(cv::InputOutputArray img, const cv::RotatedRect &box, const cv::Scalar &color,
int thickness = 1, int lineType = 8)
//例子:
Point p1(100,100);
circle(img,p1,1,Scalar(0,0,255),3);//假装中心点
RotatedRect rorct(p1,Size(200,100),0); //p1为中心点,长200,高100的矩形,旋转0度
ellipse(img,rorct,Scalar(0,0,255)); //内接椭圆
参考链接: