OpenCv(C++)学习笔记三——图像属性与基本图像绘制

图像属性与基本图像绘制

图像属性

1、画点cv::point()

该类的对象创建具有两种创建形式:1、构造函数。2、使用成员变量赋值。具体示例如下:

Point pt=Point(x,y)//第一种方式,使用构造函数
Point pt;//第二种方式,使用成员变量赋值
pt.x=10;
pt.y=8;

2、定义颜色cv::Scalar()

该类定义的是一个四元素的向量,定义如下:

Scalar scalar(double val[4]);

该类型常用于传递像素值,也常用于表示BGR颜色值(3个参数)。如果不使用最后一个参数则无需定义它。

当要定义一个颜色参数时,可以使用Scalar(a,b,c)来表示。例如,当要定义一个BGR颜色时,可以使得Blue=a、Green=b、Red=c。

3、设置尺寸cv::Size()

该类常用于定义图像的大小。示例如下:

cv::Size(int _wight,int _height)

使用示例:Size size(5,10);语句创建对象,其中我们使用size.width和size.height访问对象数据成员。

基本图形绘制

绘制直线cv::line()

cv::line()函数常常用于连接pt1到pt2两个点的直线,定义如下:

void cv::line(
    inputOutputArray img,//图像
    Point pt1,//点1
    Point pt2,//点2
    const Scalar & color,//绘制直线的颜色
    int thickness=1,//直线的厚度
    int lineType=LINE_8,//直线的类型
    int shief=0//点坐标中的小数位数
)

绘制矩形

cv::rectangle()函数用于绘制矩形。

功能实现
默认构造函数cv::Rect r;
复制构造函数cv::Rect r2(r1);
带值的构造函数cv::Rect(x,y,w,h);
访问函数成员r.x;r.y;r.wight;r.height
面积计算r.area();
判断p点是否在r中r.contains§;

cv::rectangle()函数定义有以下两种形式:
形式一:

void rectangle(
    cv::Mat& img,//待绘制的图像
    cv::Point pt1,//矩形的第一个顶点
    cv::Point pt2,//矩形对角顶点
    const cv::Scalar& color,//线条的颜色,RGB
    int line Type=8,//线型(4邻域或8邻域,默认为8邻域)
    int shift=0//偏移量
);

形式二:

void rectangle(
    cv::Mat& img,//待绘制的图像
    cv::Rect r,//待绘制的矩形
    const cv::Scalar& color,//线条的颜色,RGB
    int lineType=8,//线型(4邻域或8邻域,默认为8邻域)
    int shift=0//偏移量
)

绘制圆形

cv::circle()函数用于绘制圆形,定义如下:

void circle(
    cv::Mat& img,//待绘制的图像
    cv::Point center,//圆心位置
    int radius,//圆的半径
    const cv::Scalar& color,//线条的颜色,RGB
    int thickness=1//线宽,如果为负数则表示圆是否被填充
    int lineType=8//线型(4邻域或8邻域,默认为8邻域)
    int shift=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);//点p1
Point p2(758,50);//点p2
//画直线函数
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);//初始化点p的坐标为(20,20)
circle(img,p,1,Scalar(0,255,0),-1);
Point p4;
p4.x=300;
p4.y=300;
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("pic",img);
waitKey();
return 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值