OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
计算用于角点检测的梯度矩阵的最小特征值。
该函数类似于 cornerEigenValsAndVecs,但它计算并存储协方差矩阵导数的最小特征值,即在 cornerEigenValsAndVecs 描述中的公式里的 min(λ1, λ2)。
cv::cornerMinEigenVal 是 OpenCV 中的一个函数,用于检测图像中的角点。该函数计算每个像素周围的协方差矩阵,并返回最小特征值。最小特征值可以用来识别图像中的角点,因为角点通常会在多个方向上有较大的强度变化。
函数原型
void cv::cornerMinEigenVal
(
InputArray src,
OutputArray dst,
int blockSize,
int ksize = 3,
int borderType = BORDER_DEFAULT
)
参数
- 参数src 输入单通道 8 位或浮点图像。
- 参数dst 用于存储最小特征值的图像。它具有类型 CV_32FC1 并且大小与 src 相同。
- 参数blockSize 邻域大小(参见 cornerEigenValsAndVecs 的详细信息)。
- 参数ksize Sobel 操作符的孔径参数。
- 参数borderType 像素外推方法。参见 BorderTypes。不支持 BORDER_WRAP。
代码示例
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
// 加载图像
cv::Mat img = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/hawk.jpg", cv::IMREAD_GRAYSCALE );
if ( img.empty() )
{
std::cout << "Error opening image" << std::endl;
return -1;
}
// 计算最小特征值
cv::Mat minEigenVal;
int blockSize = 3; // 邻域大小
int ksize = 3; // Sobel 梯度算子的大小
int borderType = cv::BORDER_DEFAULT; // 边界处理类型
cv::cornerMinEigenVal( img, minEigenVal, blockSize, ksize, borderType );
// 显示最小特征值图像
cv::normalize( minEigenVal, minEigenVal, 0, 255, cv::NORM_MINMAX, CV_8U );
cv::imshow( "Original Image", img );
cv::imshow( "Min Eigen Value", minEigenVal );
cv::waitKey( 0 );
return 0;
}