Opencv的使用小教程1——Opencv基础函数汇总
Opencv的使用小教程1——Opencv基础函数汇总
- 1、VideoCapture
- 2、imread
- 3、resize
- 4、clone
- 5、cvtColor
- 6、Scalar
- 7、获取像素点的值
- 8、Rect
- 9、截取Rect部分图像
- 10、equalizeHist直方图均衡化
- 11、threshold阈值操作
- 12、line直线绘画
- 13、ellipse椭圆绘画:
- 14、circle圆绘画:
- 15、rectangle矩形绘画:
- 16、fillPoly多边形绘画:
基本上没有接触过图像处理的我,在项目的压迫下,要在一星期内精通一切,但是还是要微笑啊。
该部分主要提到的函数包括,摄像头读取、图片读取、图片复制、图片伸缩、直方图、二值化、基础绘画等。其它图像处理函数如滤波,角点检测的函数,将在其它文章汇总。
Opencv常用图像处理函数汇总
1、VideoCapture
VideoCapture可用于从摄像头获取图像,在使用前可以通过如下函数进行初始化。
VideoCapture cap; cap.open(0); //打开相机,电脑自带摄像头一般编号为0 //外接摄像头编号为1,在设备管理器中可以查询 cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280); //设置捕获视频的宽度 cap.set(CV_CAP_PROP_FRAME_HEIGHT, 400); //设置捕获视频的高度 if (!cap.isOpened()) //判断是否成功打开相机 {cout << "摄像头打开失败!" << endl;return -1; }用如下函数可以捕获图像。
//从相机捕获一帧图像 cap >> frame;2、imread
imread共有两个参数,分别是const String& filename和int flags。其中:
filename代表想要读取的图片的路径与名字。
flags代表标志位,该标志位代表转换成Mat的数据存储形式。默认值IMREAD_COLOR。
其可以取得如下值:
实际上这些标志位存储在一个名为ImreadModes的枚举量里。
在实际使用时可以通过如下函数进行图片读取:
3、resize
resize用于改变图片的分辨率
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
其中,前两个参数分别为输入和输出图像。dsize表示输出图像的大小,如果为0,则利用fx和fy进行比例放大。
当dsize=0时,表示利用fx和fy进行比例放大,fx=fy=2时,表示放大为原来的两倍;
当fx=fy=0时,表示利用dsize放大,假设dsize = (640,400),那么将图像分辨率调整为(640,400)。
interpolation表示插值方式,共有以下几种插值方法:
在实际应用中可以通过如下方式进行应用:
//从相机捕获一帧图像 cap >> frame; //用于存放灰度数据 Mat grayImage; // 利用dsize进行缩放 double fScale = 1; Size dsize = Size(frame.cols*fScale, frame.rows*fScale);// 建立一个大小与imagedst相同的图像 Mat imagedst = Mat(dsize, CV_32S);// imagedst表示目标图像 resize(frame, imagedst, dsize);4、clone
clone用于图像克隆,也就是图像复制。在实际应用中可以复制图像,在进行修改时可以不修改原图。
通过如下方式可以实现图像克隆。
5、cvtColor
cvtColor用于图像的类型转换。如BGR图转换为灰度图,RGB图转化为BGR图等。
通过如下方式可以实现图像的类型转换。
常用的转化码如下:
CV_BGR2RGB //在RGB或BGR色彩空间之间转换 CV_RGB2BGRCV_RGB2GRAY //RGB或者BGR色彩空间与灰度空间转换 CV_BGR2GRAY CV_GRAY2RGB CV_GRAY2BGRCV_RGB2RGBA //加入alpha通道或者删除alpha通道 CV_BGR2BGRA CV_RGBA2RGB CV_BGRA2BGR6、Scalar
Scalar(int,int,int);表示每个通道的数值,常常在建立空图片的时候使用。
使用方式如下所示,其可以建立三个图像:
7、获取像素点的值
可以通过如下函数获得像素点的值:
int pixel = image.at<Vec3b>(0, 0)[0];如上代表获取第i行,第j列,0为第一通道,1为第二通道,2为第三通道,若要获取透明通道则要Vec4b。
8、Rect
Rect用于获得矩形,其一共有四个输入值,分别是左上角坐标x,y,宽,高。
可以通过如下函数建立一个矩形:
此时建立了一个分辨率为(640,400)的矩形。注意的是,函数中640是矩形的宽度,不是右下角的坐标。
9、截取Rect部分图像
Rect用于获得矩形,通过特定的函数可以获得该部分的图像。
假设原图变量为image
可以通过如下函数获得部分图像:
通过该方式获得了一个左上角位于image(200,200)位置,分辨率为(200,200)的图像。
10、equalizeHist直方图均衡化
均衡化的图像相比于原图有明显的增强,可用于增强原图的可观测性。
可以通过如下函数进行直方图均衡化:
srcGray为原始灰度图,dstGray为目标灰度图。
11、threshold阈值操作
函数定义为:
double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type )src:源图像。
dst:输出图像
thresh:阈值
maxval:dst图像中最大值。
type:阈值类型,可以具体类型如下:
可以通过如下函数进行阈值操作:
threshold(srcGray, srcGray, 0, 255, THRESH_BINARY | THRESH_OTSU); //或者 threshold(srcGray, srcGray, 50, 255, THRESH_BINARY);12、line直线绘画
函数定义为:
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:线条粗细,
LINE_8:线条类型
可以通过如下函数进行直线绘画:
13、ellipse椭圆绘画:
函数定义为:
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)img:源图像。
center:中心点;
axes:大小
angle:旋转角,
startAngle, endAngle:起始角度和结束角度
color:颜色
thickness:线条粗细,
LINE_8:线条类型
可以通过如下函数进行椭圆绘画:
14、circle圆绘画:
函数定义为:
void circle(InputOutputArray img, Point center, int radius,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0)img:源图像。
center:中心点;
radius:半径
color:颜色
thickness:线条粗细,
LINE_8:线条类型
可以通过如下函数进行圆绘画:
15、rectangle矩形绘画:
函数定义为:
void rectangle(InputOutputArray img, Point pt1, Point pt2, const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0)img:源图像。
pt1:左上角的点;
pt2:右下角的点
color:颜色
thickness:线条粗细,
LINE_8:线条类型
可以通过如下函数进行矩形绘画:
16、fillPoly多边形绘画:
函数定义为:
void fillPoly(Mat& img, const Point** pts, const int* npts, int ncontours, const Scalar& color, int lineType = LINE_8, int shift = 0, Point offset = Point())img:源图像。
pts:顶点数组;
npts:顶点个数数组
ncontours:几个多边形
color:颜色
thickness:线条粗细,
LINE_8:线条类型
第二个参数可通过如下定义:
可以通过如下函数进行矩形绘画:
fillPoly( img,ppt,npt,1,Scalar( 255, 255, 255 ),1);总结
以上是生活随笔为你收集整理的Opencv的使用小教程1——Opencv基础函数汇总的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 微信小程序-炫酷手持滚动弹幕生成小工具
- 下一篇: 海外知网网址