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。
其可以取得如下值:

IMREAD_UNCHANGED          //如果设置,则返回的数据带有alpha通道(R,G,B,A 四个通道),否则没有alpha通道
IMREAD_GRAYSCALE          //如果设置,则将图像转换为单通道灰度图像
IMREAD_COLOR              //如果设置,则将图像转换成3通道BGR彩色图像
IMREAD_ANYDEPTH           //如果设置,则在输入具有相应深度时返回16位/32位图像,否则将其转换为8位
IMREAD_ANYCOLOR           //如果设置,则图像可能以任何颜色格式读取
IMREAD_LOAD_GDAL          //如果设置,使用gdal驱动程序加载图像
IMREAD_REDUCED_GRAYSCALE_2//如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/2
IMREAD_REDUCED_COLOR_2    //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/2
IMREAD_REDUCED_GRAYSCALE_4//如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/4
IMREAD_REDUCED_COLOR_4    //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/4
IMREAD_REDUCED_GRAYSCALE_8//如果设置,总是将图像转换为单通道灰度图像且图像大小减少1/8
IMREAD_REDUCED_COLOR_8    //如果设置,总是将图像转换为3通道BGR彩色图像且图像大小减少1/4
IMREAD_IGNORE_ORIENTATION //如果设置,不会根据EXIF的方向标志旋转图像

实际上这些标志位存储在一个名为ImreadModes的枚举量里。
在实际使用时可以通过如下函数进行图片读取:

imread("image.jpg",IMREAD_GRAYSCALE);

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表示插值方式,共有以下几种插值方法:

INTER_NEAREST    //最近邻插值
INTER_LINEAR    //线性插值(默认)
INTER_AREA      //区域插值
INTER_CUBIC     //三次样条插值
INTER_LANCZOS4  //Lanczos插值

在实际应用中可以通过如下方式进行应用:

//从相机捕获一帧图像
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用于图像克隆,也就是图像复制。在实际应用中可以复制图像,在进行修改时可以不修改原图。
通过如下方式可以实现图像克隆。

Mat dst;
dst = src.clone();

5、cvtColor

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

cvtColor(src, srcGray, COLOR_BGR2GRAY);

常用的转化码如下:

CV_BGR2RGB   //在RGB或BGR色彩空间之间转换
CV_RGB2BGRCV_RGB2GRAY   //RGB或者BGR色彩空间与灰度空间转换
CV_BGR2GRAY
CV_GRAY2RGB
CV_GRAY2BGRCV_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<Vec3b>(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);

Opencv的使用小教程1——Opencv基础函数汇总相关推荐

  1. Opencv的使用小教程2——Opencv常用图像处理函数汇总

    Opencv的使用小教程2--Opencv常用图像处理函数汇总 1.blur 2.GaussianBlur 3.medianBlur 4.bilateralFilter 5.腐蚀和膨胀 6.morph ...

  2. Opencv的使用小教程3——利用轮廓检测实现二维码定位

    Opencv的使用小教程3--利用轮廓检测实现二维码定位 二维码具有什么特征 实现效果 识别二维码的流程 1.预处理图像 2.寻找轮廓 3.通过寻找到的轮廓确定"回"的位置 4.创 ...

  3. 【OpenCV十六新手教程】OpenCV角检测Harris角点检测

    本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/29356187 作者:毛星云(浅墨) ...

  4. linux 关机命令_小猿圈Linux基础命令汇总

    科技进步的今天,互联网不断的发展,很多人学习Linux运维的时候会因为记不住一些命令从而去找一些渠道,有时候因为找不到linux的命令而烦恼,下面是小猿圈linux讲师给大家总结的linux基础命令, ...

  5. 微信小程序开发,基础知识点汇总详解

    目录 一.目录中文件说明 1.app.js文件 2.project.config.json文件 3.sitemap.json文件 4.页面中的.json文件 5.如何创建小程序页面 二.微信中代码的格 ...

  6. 计算机视觉之OpenCV教程 ---Mat类基础(一)

    机器视觉之OpenCV教程图像容器Mat类基础一(一) 零.OpenCV概述 基本上在机器识别的领域 ,都有OpenCV的身影 . OpenCV中基本上包含了所有的机器视觉所用到的算法 , 即使没有也 ...

  7. 【OpenCV图像处理入门学习教程六】基于Python的网络爬虫与OpenCV扩展库中的人脸识别算法比较

    OpenCV图像处理入门学习教程系列,上一篇第五篇:基于背景差分法的视频目标运动侦测 一.网络爬虫简介(Python3) 网络爬虫,大家应该不陌生了.接下来援引一些Jack-Cui在专栏<Pyt ...

  8. Python+OpenCV实用案例应用教程:基于OpenCV的图像处理

    在进行图像处理时,你迟早会发现需要转换图像--一般通过应 用艺术滤镜.推断某些部分.混合两幅图像,或者任何你能够想到的 方法完成.本章将介绍一些可以转换图像的技术.最后,你还能够执 行图像锐化.标记主 ...

  9. basler相机参数简要中文说明_附下载| OpenCV最新中文版官方教程

    OpenCV是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解OpenCV相关细节.教程根据官方提供的 ...

最新文章

  1. 【BZOJ 3747】 3747: [POI2015]Kinoman (线段树)
  2. python中and与or的执行顺序-python 代码运行顺序问题?
  3. python listbox输入内容自动换行_python中的图像界面设计(二)
  4. linux怎么锁定test用户,用户被锁定不影响JOB的运行
  5. 看网络电子围栏如何做好周界安防
  6. Java中关于省略作用域报错问题分析
  7. nginx php环境搭建_php+nginx环境配置
  8. 【分享-快速仿站】无敌超强仿站小工具一键下载
  9. mysql数据库 day03
  10. android学习日记15--WebView(网络视图)
  11. turtle fillcolor_超详细!turtle库的使用
  12. 2020-09-30
  13. Activemq 下载地址
  14. 服务器cpu占用过高一般是什么原因,常见云服务器CPU占用100%问题原因及解决办法...
  15. 用oracle做九九乘法表,Oracle三种循环例题:打印九九乘法表
  16. 计算机通识培训,通识培训研修日志
  17. 记坑Method threw ‘feign.RetryableException‘ exception.
  18. Jenkins+Newman+Postman生成接口自动化测试报告
  19. lumen5.5 使用 jwt-auth1.0 笔记
  20. apicloud命名空间$api方法集合

热门文章

  1. VC2017使用protobuf-3.17.3版本
  2. 灌溉控制器 节水灌溉自动控制器
  3. Linux环境配置-Tomcat
  4. 转:python webdriver API 之分页处理
  5. 写笔记插件_Obsidian 插件推荐
  6. CorelDraw插件开发-GMS插件-VBA-为等高线自动设色-cdr插件
  7. 智慧信访平台上线“粤复用”,为化解信访矛盾赋能
  8. Workflow JBPM 工作流
  9. flutter 输入框复制粘贴英文转中文
  10. 101. 最高的牛(差分)