OPENCV 学习系列一(包括知识,形态学)

opencv函数学习

目录

 

0、Mat

1、构造函数

2、向外提供的函数以及变量

1、dims --变量

2、channels()

3、cols 、rows

4、size

1、imread函数

2、resize函数

3、Size结构

4、createTrackbar --创建滑动条 getTrackbarPos --获取滑动条的值

5、namedWindow --新建一个显示窗口

6、cvtColor --颜色空间转换

7、threshold --二值化

8、getStructuringElement()

9、膨胀

10、腐蚀

11、开运算

12、闭运算


0、Mat

Mat 是opencv的基础类型,表示一张图片

1、构造函数

这个用到的时候再去查

2、向外提供的函数以及变量

1、dims --变量

int cv::Mat::dims;

返回图像矩阵的维度,大于等于2

 

2、channels()

int cv:: Mat :: channels()const

返回图像的通道数

 

3、cols 、rows

int cv::Mat::cols;

返回矩阵的列数

int cv::Mat :: rows;

返回矩阵的行数

 

4、size

MatSize cv::Mat::size

返回矩阵大小

 

 

1、imread函数

Mat imread(const string& filename,int flag=IMREAD_COLOR);

filename 是图片的路径,flag是可选参数,表示读入的方式

具体的flag可自行百度,太多了,而且一般用默认的就好了

 

2、resize函数

void resize(InputArray src , OutputArray dst , Size dsize , double fx=0 , double fy =0 , int interpolation = INTER_LINEAR)

 

srcdst是输入、输出图像。

dsize 表示输出图像的大小,如果为0,则使用后面的 fx,fy 来决定输出图像的大小

fx 沿x轴的放缩系数,fy沿y轴的放缩系数

参数interpolation 表示插值方式,有一下几种:

INTER_NEAREST -最近邻插值

INTER_LINEAR -线性插值(默认)

INTER_AREA -区域插值

INTER_CUBIC -三次样条插值

INTER_LANCZOS4 -Lanczos插值

 

3、Size结构

构造函数

Size() = 默认

Size (int width , int height)

Size(const cv::Size &other)

 

4、createTrackbar --创建滑动条 getTrackbarPos --获取滑动条的值

int createTrackerbar(const string& trackerbarname , const string winame , int *value , int count , TrackbarCallback onChange=0 , void *userdata =0);

 

参数解释

trackerbarname --轨迹条的名字

winame --窗口的名字,轨迹条会依附在这个窗口上

value –一个指向整形的指针,表示滑块的位置,在创建时,滑块的初始位置就是该变量当前的值

count --滑块可以达到的最大位置的值,滑块最小位置的值始终为0

onChange --指向回调函数的指针,每次滑块位置改变时,这个函数都会进行回调。并且这个函数的原型必须是 void 函数名(int , void*) 。其中第一个参数是轨迹条的位置,第二个参数是用户数据。 如果回调函数是NULL指针,则表示没有回调函数的调用,仅参数value有变化,这个参数一般用默认值就可以了。

 

userdata –用户传给回调函数的数据,用来处理轨迹条事件。如果使用的value实参是全局变量,可以不去管userdata参数

 

 

int getTrackbarPos(const string& trackbarname , const string& winname)

参数解释

trackbarname --轨迹条名字

winname --轨迹条的父窗口名称

返回滑动条当前的值

 

5、namedWindow --新建一个显示窗口

void namedWindow(const string& winname , int flags = WINDOW_AUTOSIZE);

参数解释

winname –新建窗口的名字

flags --窗口表示,有以下几个值

WINDOW_AUTOSIZE --窗口大小自动适应图片大小,并且不可以手动更改

WINDOW_NORMAL --用户可以改变窗口大小

WINDOW_OPENGL --窗口创建的时候会支持OpenGL

 

6、cvtColor --颜色空间转换

cvtColor(InputArray src , OutputArray dst , int code ,int dstCn=0)

参数解释

src --输入图像,既要进行颜色空间变换的原图像,可以是Mat类

dst --输出图像,即进行颜色变换后存储的图像,可以是Mat 类

code --转换的代码或标识,用以说明将什么制式的图片转成什么制式的图片

dstCn --目标图像通道数,如果为0,则由src和code决定

 

code常用参数

BGR2GRAY --灰度化,注意的是,opencv的rgb图像默认是BGR排序

 

7、threshold --二值化

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

参数解释

src --输入图像,可以为8位的灰度图,也可以为32位的彩色图像。

dst --输出图像

thresh --阈值

maxval –dstt图像中的最大值

type --阈值类型,可以具体类型如下:

8、getStructuringElement()

这个函数可以用来获取形态学操作所需要的核,原型如下:

Mat getStructuringElement(int shape , Size esize , Point anchor = Point(-1,-1));

参数解释

shape --这个参数表示内核的形状,有三种形状可以选择

MORPH_RECT 矩形

MORPH_CORSS 交叉形

MORPH_ELLIPSE 椭圆形

9、膨胀

膨胀就是求局部最大值的操作。从数学的角度来说,就是将图像与核进行卷积,计算核壶盖区域的像素点的最大值,并把这个最大值赋值给参考点指定的元素。这样就会使图像中的高亮区域逐渐增长。

Void dilate(const Mat& src , Mat& dst , const Mat& element , Point anchor = Point(-1,-1), int iterations =1, int borderType = BORDER_CONSTANT , const Scalar& borderValue = morphologyDefaultBorderValue());

参数解释

src --原图

dst --输出图

element --腐蚀操作的内核,如果不指定,默认为一个简单的3x3矩阵。否则,我们就要明确指定它的形状,可以使用函数getStructuringElement()。

anchor --默认为Point(-1,-1),内核的中心点,省略时为默认值。

iterations --腐蚀的次数。省略时为默认值1.

borderType --推断边缘类型,具体参见borderInterpolate函数,默认为BORDER_DEFAULT,缺省时为默认值。

borderValue --边缘值,具体可参见createMorphoogyFilter函数,可省略。

10、腐蚀

腐蚀和膨胀是相反的操作,腐蚀是求局部最小值的操作。腐蚀操作会使图像中的高亮区域逐渐减小。

Void erode(const Mat&src,Mat& dst ,const Mat& element , Point anchor = Point(-1,-1), int iterations = 1 , int borderType = BORDER_CONSTANT , const Scalar& borderValue = morphologyDefaultBorderValue() );

参数解释

src --原图

dst --输出图

element --腐蚀操作的内核,如果不指定,默认为一个简单的3x3矩阵。否则,我们就要明确指定它的形状,可以使用函数getStructuringElement()。

anchor --默认为Point(-1,-1),内核的中心点,省略时为默认值。

iterations --腐蚀的次数。省略时为默认值1.

borderType --推断边缘类型,具体参见borderInterpolate函数,默认为BORDER_DEFAULT,缺省时为默认值。

borderValue --边缘值,具体可参见createMorphoogyFilter函数,可省略。


 

11、开运算

开运算是先腐蚀后膨胀,主要用于消除小物体,在纤细点处分离物体,并且在平滑较大物体的边界同时不明显改变其面积,同时抑制比结构元小的亮细节。

void morphologyEx(InputArray src , OutputArray dst , int op , InputArray kernel , Point anchr =Point(-1,-1) ,intiterations =1, int borderType =BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue());

参数解释

src 是输入的图像,即源图像

dst 是输出图像

op是表示符,这个参数指定进行的操作,如下:

MORPH_OPEN 开运算

MORPH_CLOSE 闭运算

MORPH_GRADIENT 形态学梯度

MORPH_TOPHAT 顶帽

MORPH_BLACKHAT 黑帽

kernel 形态学运算的内核,如果为NULL,表示的是使用参考点位于中心的3x3的核。

anchor 锚的位置,默认值(-1,-1),表示锚位于中心。

iterations 迭代的次数,默认为1

boderType 用于推断图像外部像素的某种边界模式,默认值BORDER_CONSTANT。

borderValue 当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般不去使用,可以在createMorphologyFilter()函数中得到解释。

12、闭运算

闭运算是先膨胀后腐蚀,用来填充物体内细小的空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积,同时抑制比结构元小的暗细节。


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一朝英雄拔剑起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值