- 操作系统: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;
}