opencv3 实现Harris角点检测:cornerHarris函数

来源:互联网 发布:2016年双11淘宝销售额 编辑:程序博客网 时间:2024/06/05 19:02
#include<iostream>#include<vector>#include<opencv2/opencv.hpp>using namespace cv;using namespace std;int main(){Mat srcImage = imread("building.jpg");imshow("【原图】", srcImage);//因为角点检测的输入图像是单通道的,所以需要一个灰度图Mat grayImage;cvtColor(srcImage, grayImage, CV_BGR2GRAY);//进行Harris角点检测Mat dstImage;cornerHarris(grayImage, dstImage, 2, 3, 0.01);//函数调用后,得到的是  一组被检测到的角点的灰度值的集合(dstImage是角点灰度值的矩阵)//而且灰度值很小,所以如果直接显示,肉眼将无法分辨//直接显示imshow("【直接显示】", dstImage);//阀值后显示Mat thredImage;threshold(dstImage, thredImage, 0.0001, 255, CV_THRESH_BINARY);imshow("【阀值后显示】", thredImage);//另外一种显示方式//遍历角点图中的点的灰度值,如果大于某个值,就显示出来Mat showImage;srcImage.copyTo(showImage);Mat normalImage;//因为现在得到的角点图中的点的灰度值很小,为了方便计算,将这些灰度值规整(归一化操作)normalize(dstImage, normalImage, 0, 255, 32);for (int i = 0; i < showImage.rows; i++){for (int j = 0; j < showImage.cols; j++){if (normalImage.at<float>(i, j) > 15){circle(showImage, Point(j, i), 3, Scalar(255, 255, 0), 1, 8);circle(dstImage, Point(j, i), 3, Scalar(255, 255, 0), 1, 8);}}}imshow("【另外一种显示方式】", showImage);imshow("【在角点图中显示圈】", dstImage);waitKey(0);return 0;}

0 0
原创粉丝点击