定制化创建角点检测子--cornerEigenValsAndVecs()和cornerMinEigenVal()
来源:互联网 发布:app个性化推荐算法 编辑:程序博客网 时间:2024/06/07 12:00
cornerEigenValsAndVecs()
作用:计算图像块的特征值和特征向量用于角点检测。
形式:void cornerEigenValsAndVecs(InputArray src, OutputArray dst, int blockSize, int ksize, int borderType=BORDER_DEFAULT );
参数:
作用:计算图像块的特征值和特征向量用于角点检测。
形式:void cornerEigenValsAndVecs(InputArray src, OutputArray dst, int blockSize, int ksize, int borderType=BORDER_DEFAULT );
参数:
src:输入单通道8位或浮点图像;
dst:用来存储结果的图像;它有src相同的大小和类型为CV_32FC(6);
blockSize:领域尺寸;
ksize:Sobel()算子的孔径参数;
borderType:像素外推方式;
cornerMinEigenVal()
作用:计算梯度矩阵的最小特征值用于角点检测。
形式:void cornerMinEigenVal(InputArray src, OutputArray dst, int blockSize, int ksize=3, int borderType=BORDER_DEFAULT );
参数:
src:输入单通道8位或浮点图像;
dst:用来存储最小特征值的图像;它有src相同的大小和类型为CV_32FC1;
blockSize:领域尺寸;
ksize:Sobel()算子的孔径参数;
borderType:像素外推方式;
pow()
作用:给矩阵中每个元素增加一个指数幂。
形式:void pow(InputArray src, double power, OutputArray dst);
参数:
src:输入矩阵;
power:指数幂;
dst:输出大小和类型与src相同的矩阵;
<span style="font-size:14px;">#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace cv;using namespace std;/// Global variablesMat src, src_gray;Mat myHarris_dst; Mat myHarris_copy; Mat Mc;Mat myShiTomasi_dst; Mat myShiTomasi_copy;int myShiTomasi_qualityLevel = 50;int myHarris_qualityLevel = 50;int max_qualityLevel = 100;double myHarris_minVal; double myHarris_maxVal;double myShiTomasi_minVal; double myShiTomasi_maxVal;RNG rng(12345);char* myHarris_window = "My Harris corner detector";char* myShiTomasi_window = "My Shi Tomasi corner detector";/// Function headersvoid myShiTomasi_function( int, void* );void myHarris_function( int, void* );/** @function main */int main( int argc, char** argv ){ /// Load source image and convert it to gray src = imread( argv[1], 1 ); cvtColor( src, src_gray, CV_BGR2GRAY ); /// Set some parameters int blockSize = 3; int apertureSize = 3; /// My Harris matrix -- Using cornerEigenValsAndVecs myHarris_dst = Mat::zeros( src_gray.size(), CV_32FC(6) ); Mc = Mat::zeros( src_gray.size(), CV_32FC1 ); cornerEigenValsAndVecs( src_gray, myHarris_dst, blockSize, apertureSize, BORDER_DEFAULT ); /* calculate Mc */ for( int j = 0; j < src_gray.rows; j++ ) { for( int i = 0; i < src_gray.cols; i++ ) { float lambda_1 = myHarris_dst.at<Vec6f>( j, i)[ 0 ]; float lambda_2 = myHarris_dst.at<Vec6f>( j, i)[ 1 ]; Mc.at<float>(j,i) = lambda_1*lambda_2 - 0.04*pow( ( lambda_1 + lambda_2 ), 2 ); } } minMaxLoc( Mc, &myHarris_minVal, &myHarris_maxVal, 0, 0, Mat() ); /* Create Window and Trackbar */ namedWindow( myHarris_window, CV_WINDOW_AUTOSIZE ); createTrackbar( " Quality Level:", myHarris_window, &myHarris_qualityLevel, max_qualityLevel, myHarris_function ); myHarris_function( 0, 0 ); /// My Shi-Tomasi -- Using cornerMinEigenVal myShiTomasi_dst = Mat::zeros( src_gray.size(), CV_32FC1 ); cornerMinEigenVal( src_gray, myShiTomasi_dst, blockSize, apertureSize, BORDER_DEFAULT ); minMaxLoc( myShiTomasi_dst, &myShiTomasi_minVal, &myShiTomasi_maxVal, 0, 0, Mat() ); /* Create Window and Trackbar */ namedWindow( myShiTomasi_window, CV_WINDOW_AUTOSIZE ); createTrackbar( " Quality Level:", myShiTomasi_window, &myShiTomasi_qualityLevel, max_qualityLevel, myShiTomasi_function ); myShiTomasi_function( 0, 0 ); waitKey(0); return(0);}/** @function myShiTomasi_function */void myShiTomasi_function( int, void* ){ myShiTomasi_copy = src.clone(); if( myShiTomasi_qualityLevel < 1 ) { myShiTomasi_qualityLevel = 1; } for( int j = 0; j < src_gray.rows; j++ ) { for( int i = 0; i < src_gray.cols; i++ ) { if( myShiTomasi_dst.at<float>(j,i) > myShiTomasi_minVal + ( myShiTomasi_maxVal - myShiTomasi_minVal )*myShiTomasi_qualityLevel/max_qualityLevel ) { circle( myShiTomasi_copy, Point(i,j), 4, Scalar( rng.uniform(0,255), rng.uniform(0,255), rng.uniform(0,255) ), -1, 8, 0 ); } } } imshow( myShiTomasi_window, myShiTomasi_copy );}/** @function myHarris_function */void myHarris_function( int, void* ){ myHarris_copy = src.clone(); if( myHarris_qualityLevel < 1 ) { myHarris_qualityLevel = 1; } for( int j = 0; j < src_gray.rows; j++ ) { for( int i = 0; i < src_gray.cols; i++ ) { if( Mc.at<float>(j,i) > myHarris_minVal + ( myHarris_maxVal - myHarris_minVal ) *myHarris_qualityLevel/max_qualityLevel ) { circle( myHarris_copy, Point(i,j), 4, Scalar( rng.uniform(0,255), rng.uniform(0,255), rng.uniform(0,255) ), -1, 8, 0 ); } } } imshow( myHarris_window, myHarris_copy );}</span>
1 0
- 定制化创建角点检测子--cornerEigenValsAndVecs()和cornerMinEigenVal()
- OpenCV之feature2d 模块. 2D特征框架(1)Harris 角点检测子 Shi-Tomasi角点检测子 定制化创建角点检测子 亚像素级的角点检测 特征点检测
- 图像局部特征(二)--Harris角点检测子
- 图像局部特征(三)--FAST角点检测子
- 计算机视觉之(一)利用Harris检测子进行角点特征检测(含matlab源码)
- 图像局部特征(四)--FAST-ER角点检测子
- orb_slam2源码分析与优化(1)——角点检测与描述子计算
- OpenCV Harris 角点检测子
- OpenCV12(角点检测和进度条显示)
- OpenCV14(检测和绘制棋盘角点)
- 利用Harris检测子进行角点特征检测
- 利用Harris检测子进行角点特征检测
- opencv-创建自己的角点检测
- opencv-创建自己的角点检测
- 创建定制视图(1)
- 角点检测(特征值,Harris,FAST)
- 角点检测(2)harris算子
- 角点检测(3)SUSAN算子
- 使用Blend获取控件现有模板
- 基于数组实现Java 自定义Queue队列及应用
- java 登陆和注册传输的加密解密
- linux下C++开发常用工具
- hibernate many to one 非主键关联
- 定制化创建角点检测子--cornerEigenValsAndVecs()和cornerMinEigenVal()
- 第三方库SlidingMenu的使用
- Tomcat源码阅读#1:classloader初始化
- 用L-BFGS法训练最大熵模型做分类
- jquery预加载的几种方式
- 【ios开发学习 - 第三课】UITextField使用
- ubuntu下python+flask+mysql完整开发环境配置
- 点击单选按钮改变div显示隐藏
- C语言指针实现字符串的反转