函数介绍
Point可定义2D点
Scalar表示了具有4个元素的数组。在OpenCV中被大量用于传递像素值。
line绘制直线
ellipse绘制椭圆
rectangle绘制矩形
circle绘制圆
fillPoly绘制填充多边形
Point
次数结构表示了由其图像坐标x和y指定2D点,可表示为:
cv::Point pt;//此处必须使用cv::Point, 就算在引入头文件下方加入了using namespace cv;也不行
pt.x = 10;
pt.y = 10;
或者是
cv::Point point= cv::Point(8,10);
Scalar
表示了具有四个元素的数组。此类型在OpenCV中被大量用于传递像素值,第四个参数可以忽略
Scalar(r, g, b);
RGB颜色值就为: Red = r; Green = g; Blue = b;
(OpenCV默认颜色值与RGB相反 ----> BGR,但是在OC上已经被改为RGB)
创建一个空的全黑像素的空图像
Mat bamboo_dragonfly_image= Mat::zeros(w, w, CV_8SC3);
Line
cv::Point pLine1 = cv::Point(10,400);// 起始点
cv::Point pLine2 = cv::Point(300,400);// 终点
int line_thickness = 2;// 线粗
int line_lineType = 8;// 线形
// cv::line(bamboo_dragonfly_image, pLine1, pLine2, Scalar(100,0,255));
cv:: line(bamboo_dragonfly_image,// 同理这里首先得创建一个 Mat 空图像
pLine1,// 起始点
pLine2,// 终点
Scalar(100,0,255),// 颜色
line_thickness,// 线粗
line_lineType,// 线形
0);
ellipse
cv::Point p1 = cv::Point(100,250);
cv::Size s1 = cv::Size(80,30);
cv::ellipse(bamboo_dragonfly_image, p1, s1,
0, 0, 360,
Scalar(255,255,0), -1,
LINE_8, 0);
ellipse的参数
ellipse(InputOutputArray img, // 我们创建的 Mat 空图像(表示将圆加到图像上面)
Point center,// 椭圆圆心所在坐标
Size axes,// 椭圆的 “长轴” 和 “短轴”
double angle,// 椭圆旋转角度
double startAngle,// 椭圆扩展的弧度 开始
double endAngle,// 椭圆扩展的弧度 结束 (通过控制这里的两个Angle,可以绘制弧线)
const Scalar &color,// 椭圆颜色
int thickness =1,// 线粗(-1将被填充)
int lineType = LINE_8,// 线形
int shift =0// 上述椭圆中代码省略了该参数)
rectangle
int rectangle_thickness = -1;
int rectangle_lineType = 8;
cv::Point p1 = cv::Point(100,250);
cv::Point p3 = cv::Point(280,300);
cv::rectangle(bamboo_dragonfly_image, p1, p3, Scalar(0,255,255),rectangle_thickness,rectangle_lineType);
rectangle的参数
rectangle(InputOutputArray img,// 我们创建的 Mat 空图像(表示将圆加到图像上面)
Point pt1,// 起始点(我取的是矩形左上角的点)
Point pt2,// 终点(我取的是右下角的点)这里两个点(起始点,终点)取矩形对角的形势,确定对角,便确定了矩形的长宽。
const Scalar &color,// 颜色
int thickness =1,// 线粗(-1将被填充)
int lineType = LINE_8,// 线形
int shift =0)// 上述矩形代码中省略了该参数
circle
int circle_thickness = -1;
int circle_lineType = 8;
double w = 50;
cv::Point point = cv::Point(100,100);
cv::circle(bamboo_dragonfly_image, point, w,Scalar(0,0,255),circle_thickness,circle_lineType);
circle的参数
circle(InputOutputArray img,// 我们创建的 Mat 空图像(表示将圆加到图像上面)
Point center,// 圆心所在坐标
int radius,// 圆的半径
const Scalar& color,// 圆的颜色
int thickness =1,// 线粗(-1将被填充)
int lineType = LINE_8,// 线形
int shift =0// 我也不知道干啥的,可省略)
fillPoly
绘制三角形
/** 创建三角形三个顶点 用矩阵的形式创建 */
cv::Point rook_points[1][3];
rook_points[0][0] = cv::Point(100,400);
rook_points[0][1] = cv::Point(50,450);
rook_points[0][2] = cv::Point(150,450);
/** 创建三角形顶点集合 */
const cv::Point* ppt[1] = {rook_points[0]};
/** 三角形顶点数目 */
int npt[] = {3};
cv::fillPoly(bamboo_dragonfly_image, // 将三角形放到图像上
ppt, //三角形顶点集合
npt, // 三角形顶点数量
1, // 绘制的数量
Scalar(255,0,255)); // 三角形填充颜色
最后 我们需将 Mat 图像转换成 UIImage 对象
imagView1.image = MatToUIImage(bamboo_dragonfly_image);
实现的效果
参考博客