一、Harris检测原理
参见另外一篇博,是用matlab实现的客:http://blog.csdn.net/zhangchen1003/article/details/48162687
二、opencv代码实现
#include<opencv2\core\core.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace cv;
int thresh;
void on_Change(int,void*){
Mat image=imread("12.jpg",0);
Mat imageCopy=image.clone();
//显示原图
namedWindow("original image",1);
imshow("original image",image);
//角点检测
Mat harrisImage;
cornerHarris(image,harrisImage,3,5,0.01);
//归一化
Mat normImage;
normalize(harrisImage,normImage,0,255,NORM_MINMAX);
//转换成8位无符号整形
Mat scaledImage;
convertScaleAbs(normImage,scaledImage);
//将角点绘制出来
for(int i=0;i<normImage.rows;i++){
for(int j=0;j<normImage.cols;j++){
if( (int)normImage.at<float>(i,j)>thresh){
circle(imageCopy,Point(i,j),5,Scalar(255,0,0));
circle(scaledImage,Point(i,j),5,Scalar(0,255,0));
}
}
}
imshow("harrisDetector",imageCopy);
namedWindow("scaledImage",1);
imshow("scaledImage",scaledImage);
}
int main(){
thresh=0;
namedWindow("harrisDetector",1);
createTrackbar("阈值","harrisDetector",&thresh,180,on_Change);
waitKey(0);
return 0;
}
之前总是出现内存错误,后来把图片放在根目录下(和CPP文件所在地),debug模式才不出现错误,弄了一上午。。。。