opencv2 tutorial_code ImgProc部分

1、BasicLinearTransforms.cpp 基本线性变换

基本线性变换可以使用 image.convertTo(new_image, -1, alpha, beta) 实现。该程序使用 new_image.at<Vec3b>(y,x)[c] = saturate_cast<uchar>( alpha*( image.at<Vec3b>(y,x)[c] ) + beta ) 实现。

注意点:

(1)saturate_cast<uchar> 模板类

(2)坐标x与y对调

(3)通道读取方法

2、Morphology_1.cpp 形态学变换_1 (腐蚀膨胀)

(1)滑动条函数:int createTrackbar(const String& trackbarname, const String& winname, 
                              int* value, int count,
                              TrackbarCallback onChange = 0,
                              void* userdata = 0)

参数:滑动条名称,图像框名称,滑动条值,滑动条终点值,回调函数

(2)滑动条命名时可以定义位置类型

(3)腐蚀和膨胀的单词区分:Erosion 腐蚀 ,Dilation 膨胀

(4)腐蚀类型:MORPH_RECT,MORPH_CROSS,MORPH_ELLIPSE

(5)过程:

Mat element = getStructuringElement( dilation_type,
                       Size( 2*dilation_size + 1, 2*dilation_size+1 ),    //核大小
                       Point( dilation_size, dilation_size ) );                 //起点,默认Point(-1,-1)为中心点

dilate( src, dilation_dst, element );

3、Morphology_2.cpp 形态学变换_2 (开闭梯度顶帽黑帽)

(1)开:先腐蚀再膨胀,能够排除小团块物体

(2)闭:先膨胀再腐蚀,能够排除小黑洞

(3)梯度:膨胀图和腐蚀图之差,能够保留物体的边缘轮廓

(4)顶帽:原图与开运算结果图之差

(5)黑帽:闭运算结果图与原图之差

(6)过程:

Mat element = getStructuringElement( morph_elem, Size( 2*morph_size + 1, 2*morph_size+1 ), Point( morph_size, morph_size ) );

 morphologyEx( src, dst, operation, element );

4、Morphology_3.cpp 形态学变换_3 (水平、垂直提取)

(1)二值化:void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue, int adaptiveMethod, int thresholdType, int blockSize, double C)

int adaptiveMethod:在一个邻域内计算阈值所采用的算法,有两个取值,分别为 ADAPTIVE_THRESH_MEAN_C 和 ADAPTIVE_THRESH_GAUSSIAN_C 。

ADAPTIVE_THRESH_MEAN_C的计算方法是计算出领域的平均值再减去第七个参数double C的值

ADAPTIVE_THRESH_GAUSSIAN_C的计算方法是计算出领域的高斯均值再减去第七个参数double C的值

int thresholdType:这是阈值类型,只有两个取值,分别为 THRESH_BINARY 和THRESH_BINARY_INV  具体的请看官方的说明,这里不多做解释

int blockSize:adaptiveThreshold的计算单位是像素的邻域块,邻域块取多大,就由这个值作决定

double C:在对参数int adaptiveMethod的说明中,我已经说了这个参数的作用,从中可以看出,这个参数实际上是一个偏移值调整量

(2)过程:

int horizontalsize = horizontal.cols / 30;

Mat horizontalStructure = getStructuringElement(MORPH_RECT, Size(horizontalsize,1));

 erode(horizontal, horizontal, horizontalStructure, Point(-1, -1));
 dilate(horizontal, horizontal, horizontalStructure, Point(-1, -1));

(3)bitwise_not()图像反转

(4)去边:原图模糊(白底黑图)后与边缘(黑底白边)叠加。

5、Pyramids.cpp 高斯金字塔

图像放大、缩小

  1. void pyrDown(InputArray src,   
  2.              OutputArray dst,   
  3.              const Size& dstsize=Size())  
6、Smoothing.cpp 

参考博客:http://blog.csdn.net/tealex/article/details/51553787

归一化滤波:blur( src, dst, Size( i, i ), Point(-1,-1) ) 线性
高斯滤波:GaussianBlur( src, dst, Size( i, i ), 0, 0 ) 线性,去白噪声
中值滤波:medianBlur ( src, dst, i ) 非线性,去椒盐噪声
双边滤波: bilateralFilter ( src, dst, i, i*2, i/2 ) 非线性,效果好,可以实现保边去噪

滤波器小结
一、低通滤波器(模糊和平滑)
1、均值(线性)
2、高斯(线性)  去白噪声
3、中值(非线性) 去椒盐噪声
二、高通滤波器(可边缘检测)
1、sobel算子(方向)
2、拉普拉斯变换(二阶导数)
三、邻域滤波
1、方框
2、高斯
3、中值
4、双边(非线性) 保边去噪

7、Threshold.cpp 二值化

threshold( src_gray, dst, threshold_value, max_BINARY_value,threshold_type );

Binary:即二值化,将大于阈值的灰度值设为最大灰度值,小于阈值的值设为0。

Binary Inverted:将大于阈值的灰度值设为0,大于阈值的值设为最大灰度值。

Threshold Truncated:将大于阈值的灰度值设为阈值,小于阈值的值保持不变。

Threshold to Zero:将小于阈值的灰度值设为0,大于阈值的值保持不变。

Threshold to Zero Inverted:将大于阈值的灰度值设为0,小于阈值的值保持不变。

8、Threshold_inRange.cpp  实现单通道图像阈值分割

void inRange(InputArray src,InputArray lowerb, InputArray upperb, OutputArray dst)

lowerb为三通道下限:Scalar(low_b,low_g,low_r)

upperb为三通道上限:Scalar(high_b,high_g,high_r)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值