1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类 rectangle绘

OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类 rectangle绘

时间:2019-06-18 23:01:05

相关推荐

OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类 rectangle绘

OpenCV 学习笔记

day14 图像几何形状绘制数据类型rect类RotatedRect 类函数rectangle()绘制矩形circle() 绘制圆形函数line()画线函数ellipse() 函数代码

day14 图像几何形状绘制

用rectangle函数直接在图像上绘制一个矩形框或者先用rect函数先绘制一个矩形框再用rectangle标记在图像上,rectangle通常用在图片的标记上

数据类型

rect类

用来绘制矩形

Rect(int x, int y, int width, int height)

Rect(矩形左上角 x 坐标,矩形左上角 y 坐标,矩形的宽,矩形的高)

rect类详解–rect类详解

例1

Rect rect;rect.x = 200;rect.y = 180;rect.width = 150;rect.height = 150;//Rect(int x, int y, int width, int height),//Rect(左上角 x 坐标,左上角 y 坐标,矩形的宽,矩形的高)

RotatedRect 类

RotatedRect是一个存储旋转矩形的类

类型中的成员:

RotatedRect该类表示平面上的旋转矩形(外接矩阵)

包含以下三部分:

椭圆外接最小矩形中心点(质心)-center

边长(长和宽)-height,width

旋转角度-angle

//定义class CV_EXPORTS RotatedRect{public://构造函数RotatedRect();RotatedRect(const Point2f& center, const Size2f& size, float angle);RotatedRect(const CvBox2D& box);void points(Point2f pts[]) const;//!返回矩形的4个顶点Rect boundingRect() const; //返回包含旋转矩形的最小矩形operator CvBox2D() const; //!转换到旧式的cvbox2d结构Point2f center; //矩形的质心Size2f size; //矩形的边长float angle; //旋转角度,当角度为0、90、180、270等时,矩形就成了一个直立的矩形};

转自另一个博主的详解– RotatedRect类 详解

例2

//绘制椭圆RotatedRect rrt;//绘制椭圆rrt.center = Point(100, 100); //矩形中心点(质心)rrt.size = Size(100,150);//边长(长和宽)rrt.angle = 90.0; //旋转角度ellipse(bg, rrt, Scalar(0, 0, 255), 2, LINE_AA);//将绘制的椭圆绘制在图像上

函数

rectangle()绘制矩形

rectangle函数是用来绘制一个矩形框的,通常用在图片的标记上

//定义1CV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);

将绘制好的矩形框rec放置在输出图像img中

例3

将左上角坐标为(400,200),长宽为150*150的矩形框放置在图像image中

Rect rect;//Rect(int x, int y, int width, int height),Rect(左上角 x 坐标,左上角 y 坐标,矩形的宽,矩形的高)rect.x = 400;rect.y = 280;rect.width = 150;rect.height = 150;rectangle(image,rect,Scalar(0,255,255),1,8,0);//在image上绘制一个左上坐标为(200,200),100*100的矩形框//rectangle(输入输出图像,绘制矩形,颜色,填充方式(>0为矩形框,<0为填充),线条规格,点坐标小数数位

//定义2CV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);

例4

Point left,right;//左上和右下的坐标点left.x = 200;left.y = 200;right.x = 350;right.y = 350;rectangle(image,left,right,Scalar(0,255,255),-1,8,0);//thickness==-1 为填充

circle() 绘制圆形函数

//定义CV_EXPORTS_W void circle(InputOutputArray img, Point center, int radius,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);

例5

circle(image,Point(100,100),15,Scalar(0,0,255),2,8,0);//圆心坐标为(100,100)//半径为15//颜色(0,0,255)//线条粗细程度为2

line()画线函数

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

例6

//绘制线条line(bg,point(150,150),point(370,370),scalar(0,255,0),2,8,0);

ellipse() 函数

定义1

用椭圆外接矩形参数绘制椭圆

CV_EXPORTS_W void ellipse(InputOutputArray img, const RotatedRect& box, const Scalar& color,int thickness = 1, int lineType = LINE_8);

例7

RotatedRect rrt;//绘制椭圆rrt.center = Point(100, 100); //矩形中心点(质心)rrt.size = Size(100,150);//边长(长和宽)rrt.angle = 90.0; //旋转角度ellipse(bg, rrt, Scalar(0, 0, 255), 2, LINE_AA);//将绘制的椭圆绘制在图像上

定义2 直接用函数带参数绘制椭圆

CV_EXPORTS_W void 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);

例8

ellipse(bg, Point(220, 220),Size(50,30),0,0,360,Scalar(0,0,255),2,8,0);

代码

quickopencv.h

#pragma once#include <opencv2\highgui.hpp>#include <opencv2\imgproc.hpp>using namespace cv;//定义类class QuickDemo{public:void colorSpace_Demo(Mat &image);//色彩空间转换函数-12-24void mat_creation_demo(Mat &image);//Mat对象与创建-12-27void pixel_vist_Demo(Mat &image);//图像像素的读写操作-1-3void operators_demo(Mat &image);//图像像素的算数操作-1-4void tracking_bar_demo(Mat &image);//滚动条操作演示-1-7void key_demo(Mat &image);//键盘响应操作-1-12void color_style_demo(Mat &image);//OpenCV自带颜色表操作-1-12void bitwise_demo(Mat &image);//位操作(逻辑操作)-1-17void channels_demo(Mat &image);//通道分离与合并-1-17void inrange_demo(Mat &image);//roi区域提取 -1-20void pixel_statistic_demo(Mat &image);//像素值统计-1-21void drawing_demo(Mat &image);//图像几何形状绘制 -2-8};

QuickDemo.cpp

#include <opencv2\highgui.hpp>#include <opencv2\imgproc.hpp>#include<quickopencv.h>#include <iostream>void QuickDemo::drawing_demo(Mat &image){Rect rect;//Rect(int x, int y, int width, int height),Rect(左上角 x 坐标,左上角 y 坐标,矩形的宽,矩形的高)rect.x = 200;rect.y = 180;rect.width = 150;rect.height = 150;Point left,right;left.x = 150;left.y = 150;right.x = 370;right.y = 370;//rectangle(image,rect,Scalar(0,255,255),1,8,0);//在image上绘制一个左上坐标为(200,200),100*100的矩形框//rectangle(输入输出图像,绘制矩形,颜色,填充方式(>0为矩形框,<0为填充),线条规格,点坐标小数数位)--显示效果1//rectangle(image,left,right,Scalar(0,255,255),-1,8,0);//填充-显示效果2//imshow("绘制演示", image);//画圆Mat bg = Mat::zeros(image.size(), image.type());//circle(bg,Point(100,100),15,Scalar(0,0,255),2,8,0);//LINE_AA反锯齿 ---显示效果3//imshow("画圆", bg);//填充的矩形框框选人脸//rectangle(bg, left, right, Scalar(0, 0, 255), -1, 8, 0);//Mat dst;//addWeighted(image,0.7, bg, 1, 0, dst); /*void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype = -1); dst = src1*alpha + src2*beta + gamma; *///---显示效果4//imshow("填充的矩形框框选人脸",dst);//绘制线条//line(bg,point(150,150),point(370,370),scalar(0,255,0),2,8,0);//addweighted(image,0.7,bg,1,0,dst);//将绘制的线条绘制在图像上//imshow("线条",dst);//---显示效果5//绘制椭圆RotatedRect rrt;//绘制椭圆rrt.center = Point(100, 100); //矩形中心点(质心)rrt.size = Size(100,150);//边长(长和宽)rrt.angle = 90.0; //旋转角度ellipse(bg, rrt, Scalar(0, 0, 255), 2, LINE_AA);//将绘制的椭圆绘制在图像上//imshow("绘制椭圆",bg);//---显示效果6ellipse(bg, Point(220, 220),Size(50,30),0,0,360,Scalar(0,0,255),2,8,0);imshow("绘制椭圆2", bg);}

#include <iostream>//#include "opencv2\core.hpp"//#include <opencv2\opencv.hpp>#include <opencv2\highgui.hpp>#include <opencv2\imgproc.hpp>#include<quickopencv.h>using namespace cv;using namespace std;int main(){Mat scr = imread("D:\\学习\\OpenCV学习\\pictures\\image\\2.webp");//打开一张图if (!scr.data == 1)//判空return -1;namedWindow("窗口1", WINDOW_NORMAL);//创建 WINDOW_FREERATIO窗口imshow("窗口1",scr);//在创建的窗口显示QuickDemo qd;qd.drawing_demo(scr);waitKey(0);return 0;}

显示效果1 矩形框显示

显示效果2 填充

显示效果3 画圆

画圆 去锯齿

显示效果4 填充的矩形框框选人脸

显示效果5 画线条 将绘制的线条绘制在图像上

显示效果6 画椭圆

旋转角度为0.0

旋转角度为10.0

旋转角度为45.0

旋转角度为 90.0

显示效果7 绘制圆弧

中心坐标(220,220),

轴长50,30 ,

偏转角度为0,

起始角角度为0,

终止角度为360

ellipse(bg,Point(220,220),Size(50,30),0,0,360,Scalar(0,0,255),2,8,0);

OpenCV 学习笔记-day14 图像几何形状绘制 (rect类 RotatedRect 类 rectangle绘制矩形 circle绘制圆形函数 line画线函数 ellipse画椭圆函数)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。