Opencv的使用小教程1 您所在的位置:网站首页 opencv的使用教程 Opencv的使用小教程1

Opencv的使用小教程1

2022-06-13 11:46| 来源: 网络整理| 查看: 265

Opencv的使用小教程1——Opencv基础函数汇总 1、VideoCapture2、imread3、resize4、clone5、cvtColor6、Scalar7、获取像素点的值8、Rect9、截取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 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用于图像克隆,也就是图像复制。在实际应用中可以复制图像,在进行修改时可以不修改原图。 通过如下方式可以实现图像克隆。

Mat dst; dst = src.clone(); 5、cvtColor

cvtColor用于图像的类型转换。如BGR图转换为灰度图,RGB图转化为BGR图等。 通过如下方式可以实现图像的类型转换。

cvtColor(src, srcGray, COLOR_BGR2GRAY);

常用的转化码如下:

CV_BGR2RGB //在RGB或BGR色彩空间之间转换 CV_RGB2BGR CV_RGB2GRAY //RGB或者BGR色彩空间与灰度空间转换 CV_BGR2GRAY CV_GRAY2RGB CV_GRAY2BGR CV_RGB2RGBA //加入alpha通道或者删除alpha通道 CV_BGR2BGRA CV_RGBA2RGB CV_BGRA2BGR 6、Scalar

Scalar(int,int,int);表示每个通道的数值,常常在建立空图片的时候使用。 使用方式如下所示,其可以建立三个图像:

Mat blue_m(256,256,CV_8UC3,Scalar(255,0,0)); Mat green_m(256,256,CV_8UC3,Scalar(0,255,0)); Mat red_m(256,256,CV_8UC3,Scalar(0,0,255)); imshow("Blue",blue_m); imshow("Green",green_m); imshow("Red",red_m); 7、获取像素点的值

可以通过如下函数获得像素点的值:

int pixel = image.at(0, 0)[0];

如上代表获取第i行,第j列,0为第一通道,1为第二通道,2为第三通道,若要获取透明通道则要Vec4b。

8、Rect

Rect用于获得矩形,其一共有四个输入值,分别是左上角坐标x,y,宽,高。 可以通过如下函数建立一个矩形:

Rect rec = Rect(0, 0, 640, 400);

此时建立了一个分辨率为(640,400)的矩形。注意的是,函数中640是矩形的宽度,不是右下角的坐标。

9、截取Rect部分图像

Rect用于获得矩形,通过特定的函数可以获得该部分的图像。 假设原图变量为image 可以通过如下函数获得部分图像:

Rect rec = Rect(200, 200, 200, 200); Mat part_img= image(rec); //获取缩放后右Camera的图像

通过该方式获得了一个左上角位于image(200,200)位置,分辨率为(200,200)的图像。

10、equalizeHist直方图均衡化

均衡化的图像相比于原图有明显的增强,可用于增强原图的可观测性。 可以通过如下函数进行直方图均衡化:

equalizeHist(srcGray, dstGray);

srcGray为原始灰度图,dstGray为目标灰度图。

11、threshold阈值操作

函数定义为:

double threshold( InputArray src, OutputArray dst, double thresh, double maxval, int type )

src:源图像。 dst:输出图像 thresh:阈值 maxval:dst图像中最大值。 type:阈值类型,可以具体类型如下:

THRESH_BINARY //大于阈值的部分被置为255,小于部分被置为0。 THRESH_BINARY_INV //大于阈值部分被置为0,小于部分被置为255。 THRESH_TRUNC //大于阈值部分被置为threshold,小于部分保持原样。 THRESH_TOZERO //小于阈值部分被置为0,大于部分保持不变。 THRESH_TOZERO_INV //大于阈值部分被置为0,小于部分保持不变。 THRESH_BINARY | THRESH_OTSU //利用OTSU自适应阈值。

可以通过如下函数进行阈值操作:

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:线条类型 可以通过如下函数进行直线绘画:

line( img, start, end, Scalar( 0, 0, 0 ), thickness=2, lineType=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:线条类型 可以通过如下函数进行椭圆绘画:

Point center = Point(200,200); Point axes = Point(100,50); ellipse( img, center, axes, angle, 0, 360, Scalar( 255, 0, 0 ), 1); 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:线条类型 可以通过如下函数进行圆绘画:

Point center = Point(200,200); int r = 6; circle( img, center, r, Scalar( 0, 0, 255 ), 1); 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:线条类型 可以通过如下函数进行矩形绘画:

rectangle( image, Point(0,0), Point(200,200), Scalar( 0, 255, 255 ), thickness = -1, lineType = 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:线条类型 第二个参数可通过如下定义:

Point rookPoints[1][20];rookPoint[0][0]=Point(1,1);.... const Point* ppt[1]={rookPoints[0]}; int npt[]={20};

可以通过如下函数进行矩形绘画:

fillPoly( img,ppt,npt,1,Scalar( 255, 255, 255 ),1);


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有