在VS2017平台上通过openCV4 做图像匹配时遇到的问题和解决方法

(包括一些基础的图像处理时遇到的问题)

序言

因为我是一个萌新,所以这一篇主要就事论事,讲一些我遇到的问题和解决方法。

1.cvtColor函数

cvtColor函数所在的头文件为:imgproc.hpp
cvtColor的功能是把图像从一个彩色空间转换到另外一个色彩空间,有三个参数,第一个参数表示源图像,即输入的图像;第二参数表示色彩空间转换之后的图像,即输出的图像;第三个参数表示源和目标色彩空间,即将一种色彩空间转化为另外一种色彩空间。
例如:cvtColor(input, output, COLOR_GRAY2BGR);
其中COLOR_GRAY2BGR指的是将GRAY(灰度图)转化为BGR(彩图),其他的转换和这种写法相同,但是实际上,灰度图转化为的彩图依旧没有色彩。
注意:
当最初导入的时候如果类型不和第三个参数相同的时候,就会报错。
例如input是彩图的话,如果使用COLOR_GRAY2BGR就会出错。

2.GaussianBlur函数

GaussianBlur函数所在的头文件为:imgproc.hpp
它常用来处理高斯平滑。
使用方法为:GaussianBlur(输入图像, 输出图像, 高斯内核大小(Ksize), x方向上的标准偏差(sigmaX), y方向上的标准偏差(sigmaY))
例如:GaussianBlur(input, output, Size(), sigma, sigma);
其中输入图像和输出图像需要是相同大小且相同类型的。
ksize,高斯内核的大小。其中ksize.width和ksize.height可以不同,但他们都必须为正数和奇数,因为只有正奇数个的时候才会出现有一个像素正好处于中间。或者,它们可以是零的,它们都是由sigma计算而来。
sigmaX,表示高斯核函数在X方向的的标准偏差。
sigmaY,表示高斯核函数在Y方向的的标准偏差。若sigmaY为零,就将它设为sigmaX,如果sigmaX和sigmaY都是0,那么就由ksize.width和ksize.height计算出来。
在计算中,高斯内核的大小与标准差的比值差不多是3倍,因为3倍标准差里可以包含99%的信息。

3.resize函数

resize函数所在的头文件为:imgproc.hpp
使用方法为:resize(input, output, Size dsize, double fx, double fy, int interpolation=INTER_LINEAR)
参数说明:
input - 要缩放的原图
output - 输出图像图像。当参数dsize不为0时,输出图像的大小为size;否则,它的大小需要根据输入图像的大小,参数fx和fy决定。输出图像的类型和输入图像相同
dsize - 目标图像大小
所以,参数dsize和参数(fx, fy)不能够同时为0
fx - 水平轴上的比例因子。
fy - 垂直轴上的比例因子。
最后一个参数插值方法,是默认值,放大时最好选 INTER_LINEAR ,缩小时最好选 INTER_AREA。

4.matcher.knnMatch函数

matcher.knnMatch函数用于做图像匹配。
matcher.knnMatch(输入特征矩阵1, 输入特征矩阵2, 匹配对,最佳匹配对的数量);
其中输入的全部为特征矩阵,虽然图片同属Mat,但是无法作为参数输入,输入即报错。
匹配对为输出的。
最佳匹配对的数量会可能因为符合描述的不太足够而少于设定的数量。