角点检测

来源:互联网 发布:matlab支持c语言吗 编辑:程序博客网 时间:2024/06/08 07:33
//opencv论坛的代码
#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;int thresh = 200;int max_thresh = 255;char* source_window = "Source image";char* corners_window = "Corners detected";/// Function headervoid cornerHarris_demo(int, void*);/** @function main */int main(int argc, char** argv){/// Load source image and convert it to graysrc = imread("1.jpg", 1);cvtColor(src, src_gray, CV_BGR2GRAY);resize(src_gray, src_gray, Size(300, 300));/// Create a window and a trackbarnamedWindow(source_window, CV_WINDOW_AUTOSIZE);createTrackbar("Threshold: ", source_window, &thresh, max_thresh, cornerHarris_demo);imshow(source_window, src);cornerHarris_demo(0, 0);waitKey(0);return(0);}/** @function cornerHarris_demo */void cornerHarris_demo(int, void*){Mat dst, dst_norm, dst_norm_scaled;dst = Mat::zeros(src.size(), CV_32FC1);/// Detector parametersint blockSize = 2;int apertureSize = 3;double k = 0.04;/// Detecting cornerscornerHarris(src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT);/// Normalizingnormalize(dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat());convertScaleAbs(dst_norm, dst_norm_scaled);/// Drawing a circle around cornersfor (int j = 0; j < dst_norm.rows; j++){for (int i = 0; i < dst_norm.cols; i++){if ((int)dst_norm.at<float>(j, i) > thresh){circle(dst_norm_scaled, Point(i, j), 5, Scalar(0), 2, 8, 0);}}}/// Showing the resultnamedWindow(corners_window, CV_WINDOW_AUTOSIZE);imshow(corners_window, dst_norm_scaled);}
0 0