#include "opencv2/opencv.hpp"
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/imgproc/imgproc.hpp"
#include<iostream>
#include<vector>
#include<typeinfo>
using namespace std;
using namespace cv;
int main()
{
Mat src, src_gray, dst, dst_norm, dst_norm_scaled;
src = imread("1.jpg");
cvtColor(src, src_gray, CV_BGR2GRAY);
int blockSize = 3;
int apertureSize = 3;
double k = 0.04;
int thresh = 218;
cornerHarris(src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT);
normalize(dst,dst_norm,0,255,NORM_MINMAX,-1,Mat());
convertScaleAbs(dst_norm, dst_norm_scaled,1,0);
vector<float>arr;
for (int i = 0; i < dst.rows; i++)
{
float*Data = dst.ptr<float>(i);
//float*Data = (float*)(dst.data + i*dst.step);
for (int j = 0; j < dst.cols; j++)
{
arr.push_back(Data[j]);
}
}
vector<float>::iterator p = max_element(arr.begin(), arr.end());
vector<float>::iterator q = min_element(arr.begin(), arr.end());
cout <<"Harris的最大响应值为:"<< *p << endl;
cout <<"Harris的最小响应值为:"<< *q << endl;
system("pause");
return 0;
}
原图src如下图所示:
代码输出结果见图:
可知R值最高的时候也不过是0.000278684。当然这跟图像有关系。