opencv重要函数整理(附重点讲解)

  • Post author:
  • Post category:其他

opencv 模块


opencvmodule

opencv 基本操作


1.导入图片

cv::imread("filepath",COLOR)
---COLOR = 0 灰度图
---COLOR = 1 或者 不给参数 彩色图

2.灰度图和彩色图转换

cv::cvtColor(img,dstimg,COLOR_BGR2GRAY)
---COLOR_BGR2GRAY 转换为灰度图
---COLOR_BGR2HSV  转换为HSV类型图

3.阈值处理

double cv::threshold(InputArray src, OutputArray dst, double thresh, double maxval,int type)
---type 有几种类型
THRESH_BINARY 二值类型
THRESH_BINARY_INV 二值相反类型
THRESH_TRUNC 削峰类型等

threshold图像
threshold公式

opencv 图像处理

1…直方图均衡化

直方图均衡化的目的是使得图像的直方图更加地均匀化,算法是用积分算法,得出的效果如下:
在原始图像对比度本来就很高的情况下,如果再均衡化进行灰度调和,对比度会降低,在泛白缓和的图像中,均衡化会增强对比图。
均衡化

cv::euqalizeHist(srcImage,dstImage);

2…滤波

滤波的作用在于1.抽出对象的特征作为图像识别的特征模式。2,适应图像处理的要求。
噪声有高斯噪声,椒盐噪声等,经常出现在信号的好频段。
滤波有线性滤波类:高斯滤波核,均值滤波核,
非线性滤波类:中值滤波核等。

  • 线性滤波类
//方框滤波
boxFilter(src,dst,depth,ksize,Point ancher,boolnormalize = true,int borderType = BORDER_DEFAULT)
//高斯滤波核
GaussianBlur(src,dst,ksize,sigmax,sigmay = 0, inborderType = BORDER_DEFAULT)
//均值滤波核
blur(src,dst,ksize,Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT)
  • 非线性滤波类
    中值滤波
    优势:在均值滤波器中,噪声成分被放入平均计算中,所以输出受噪声影响,中值滤波中噪声难选上,
    几乎不会影响到输出,对椒盐噪声处理的比较好
    劣势:花费的时间是均值滤波的5倍以上
medianBlur(src,dst,ksize)
//双边滤波

3.形态学操作

腐蚀、膨胀、开运算、闭运算
腐蚀效果:去掉凸起部分
膨胀效果:填充凸起部分
开运算:先腐蚀后膨胀
闭运算:先膨胀后腐蚀

//膨胀操作
void dilate(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
};
//第三个参数kernel,膨胀操作的核。当为NULL时,表示使用参考点位于中心3*3的核。
//一般与getStructuringElement这个函数一起使用,用来返回作为kernel的Mat。

//腐蚀操作
void erode(
InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue()
};
//第三个参数kernel,腐蚀操作的核。当为NULL时,表示使用参考点位于中心3*3的核。
//一般与getStructuringElement这个函数一起使用,用来返回作为kernel的Mat。

//更高级的API: morphologyEx()
void morphologyEx(
InputArray src,
OutputArray dst,
int op,
InputArraykernel,
Pointanchor = Point(-1,-1),
intiterations = 1,
intborderType = BORDER_CONSTANT,
constScalar & borderValue = morphologyDefaultBorderValue();

//第三个参数op即是操作的方式,具体见下面的图。

在这里插入图片描述

3.角点检测

角点检测主要有两种方法:
Harris和Shi-Tomasi
Harris主要是在邻域blcoksize*blocksize区域内利用强度梯度计算协方差矩阵来计算检测
Shi-Tomasi利用了goodFeaturesToTrack函数来检测角点

cornerHarris(src,dst,blockSize,ksize,k,intborderType = BORDER_DEFAULT)
//--blockSize表示邻域的大小
//--Sobel表示Sobel()孔径的大小

亚像素级角点检测
goodFeaturesToTrack()的精度可能不够,
需要精确度更高的函数
cornerSubPix()函数来进行计算


版权声明:本文为xcpython原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。