goodFeaturesToTrack()提取的角点只能达到像素级别,在良多环境下并不克不及知足现实的需求,这时就需要cornerSubPix()对检测的角点作进一步的优化计较,
使角点的精度达到亚像素级别 。
void cornerSubPix(
InputArray image, // 输入图像
InputOutputArray corners, // 角点
Size winSize, // 区域大小为 N*N; N=(winSize*2+1)
Size zeroZone, // 近似于winSize,Size(-1,-1)暗示忽略
TermCriteria criteria // 遏制优化的尺度
);
第一个参数是输入图像和goodFeaturesToTrack()中的输入图像是统一个图像 。
第二个参数是检测到的角点,便是输入也是输出 。
第三个参数是计较亚像素角点时考虑的区域大小,大小为N*N; N=(winSize*2+1) 。
第四个参数感化近似于winSize,可是老是具有较小的规模,凡是忽略(即Size(-1, -1)) 。
第五个参数暗示计较亚像素时遏制迭代的尺度,可选的值有TermCriteria::MAX_ITER 、TermCriteria::EPS,前者暗示迭代次数达到了最年夜次数时遏制,后者暗示角点位置转变的最小值已经达到最小时遏制迭代 。 二者均利用cv::TermCriteria()机关函数进行指定 。
文章插图
4goodFeaturesToTrack连系cornerSubPix的应用
法式:
#include <opencv2\opencv.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\features2d\features2d.hpp>
#include <opencv2\core\core.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat image_color = imread("Lighthouse.jpg", 1);
Mat image_gray;
cvtColor(image_color, image_gray, COLOR_BGR2GRAY);
//设置角点检测参数
vector<Point2f> corners;
int max_corners = 500;
double quality_level = 0.01;
double min_distance = 3.0;
int block_size = 3;
bool use_harris = false;
double k = 0.04;
goodFeaturesToTrack(image_gray,
corners,
max_corners,
quality_level,
min_distance,
推荐阅读
- OpenCV:相机标定示例程序的使用
- OpenCV:相机标定函数和程序
- AE的动力角点效果怎么制作
- 解决无数人对安装opencv环境变量疑惑的终极答案
- python3+opencv3用拉普拉斯算子实现边缘检测
- python3.6.5环境 opencv3.3.1进行直方图均衡