资源简介
开发环境为vs2015 debug x64+opencv3.2。资源为一个源.cpp文件,三个算子分别写成了三个函数。下载前请先看一下环境和opencv版本是否一致。
代码片段和文件信息
#include
#include
using namespace std;
using namespace cv;
void Moravec(InputArray image vector& keypoints int threshold); //Moravec算子提取特征点函数
void Forstner(InputArray image vector& keypoints); //Forstner算子提取特征点函数
void Harris(InputArray image vector& keypoints); //Harris算子提取特征点函数
int main()
{
Mat img = imread(“D:/测试图像/7.jpg“ IMREAD_GRAYSCALE); //读取图像,可更改路径。IMREAD_GRAYSCALE表示读取灰度图像
Mat output;
vectorkey; //用于保存关键点
// Moravec(img key 10000); //调用Moravec函数提取特征点并保存到Key中
// Forstner(img key); //调用Forstner函数提取特征点并保存到Key中
Harris(img key); //调用Harris函数提取特征点并保存到Key中
cout << “图像特征点个数:“ << key.size() << endl; //输出提取的特征点的个数
drawKeypoints(img key output Scalar::all(0)); //绘制特征点,第四个参数可改变绘制的特征点的颜色
imshow(“图像提取的特征点“ output); //显示特征点
waitKey(0);
return 0;
}
void Moravec(InputArray image vector& keypoints int threshold)
{
Mat img = image.getMat();
int kSize = 5; //窗口大小
int r = kSize / 2;
for (int i = r; i < img.rows - r; i++)
{
for (int j = r; j {
int V1 V2 V3 V4;
V1 = V2 = V3 = V4 = 0;
//计算水平方向窗内兴趣值
for (int k = -r; k < r; k++)
V1 += (img.at(i j + k) - img.at(i j + k + 1))*(img.at(i j + k) - img.at(i j + k + 1));
//计算垂直方向窗内兴趣值
for (int k = -r; k < r; k++)
V2 += (img.at(i + k j) - img.at(i + k + 1 j))*(img.at(i + k j) - img.at(i + k + 1 j));
//计算45度方向窗内兴趣值
for (int k = -r; k < r; k++)
V3 += (img.at(i + k j + k) - img.at(i + k + 1 j + k + 1))*(img.at(i + k j + k) - img.at(i + k + 1 j + k + 1));
//计算135度方向窗内兴趣值
for (int k = -r; k < r; k++)
V4 += (img.at(i + k j - k) - img.at(i + k + 1 j - k - 1))*(img.at(i + k j - k) - img.at(i + k + 1 j - k - 1));
//取其中的最小值作为该像素点的最终兴趣值
int value = min(min(V1 V2) min(V3 V4));
//若兴趣值大于阈值,保存点的坐标
if (value > threshold)
{
keypoints.push_back(KeyPoint((float)j (float)i 2));
}
}
}
}
void Forstner(InputArray image vector& keypoints) //简化版Forstner算法
{
Mat img = image.getMat();
int ksize = 3; //窗口大小
int r = ksize / 2;
double N[4] = { 0.0 }; //协方差阵
double q = 0.0 w = 0.0; //兴趣值q和w,q是像素对应误差椭圆的圆度,w是像素的权
double Tq = 0.5; //阈值
const int nRows = img.rows;
const int nCols = img.cols;
Mat Prepoint = Mat::zeros(img.size() CV_8UC1); //初选点矩阵初始化为0,如果某点被选为初选点,则该点位置在此数组中赋为1.
Mat Weipoint = Mat::zeros(img.size() CV_8UC1); //权矩阵,存放初选点的权w,初始化为0。
Mat Flagpoint = Mat::zeros(img.size() CV_8UC1);
int D[4] = { 0 };
int threshold = 65;
//利用
相关资源
- ChartCtrl控件库(可在VS2019中使用)
- Qt画图工具源码(qgraphics draw)
- C++ SHA256加密计算
- ResHacker 3.5 汉化 绝对可用
- lbm模拟液滴从壁面滑落
- 各种加密算法C语言版
- High-speed Charting ControlMFC绘图控件
- ZhajingHua.cpp
- DDA算法、中点bresenham算法及bresenham算
- C++商品管理系统50页报告+源码。代码
- 圆的扫描转换,中点bresenham画圆算法
- 使用itextsharp.dll把两个pdf文件合并成一
- mfc数值微分算法和Bresenham算法画直线
- 经典图形控件TeeChart8(内含最全的帮
- VC读取shapefile文件源码,处理点线面
- VC6中使用MFC自动化Excel数据写入和图表
- VC 实现DDA,Breshenham,中点直线生成法
- VS2010中MFC利用TeeChart控件实现画三维图
- HandWriting Predict 手写数字识别小项目
- c语言期末大作业图书管理系统
- 鼠标交互画圆及椭圆基于Bresenham、中
- 浅水方程C++源代码
- 基于qt5.6与echarts配合打造最强图表库
- 基于QT5.6编写Echart动态交互仪表盘-修
- 波形图软件库CChart4.2.1.0版32位版
- 基于MFC的TeeChart控件
- Hash算法之SHA1实现c++
- High-speed Charting Control MFC绘制图表控件
- MFC 与 HALCON混合编程
- Tower_Hanoi.rar
评论
共有 条评论