// newbuild_opencv1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "opencv2\imgproc\imgproc.hpp"
#include "opencv2\highgui\highgui.hpp"
#include<iostream>
using namespace cv;
using namespace std;
#define WINDOW_NAME1 "【程序窗口1】"
#define WINDOW_NAME2 "【程序窗口2】"
Mat g_srcImage, g_srcImage1, g_grayImage;
int thresh = 30;
int max_thresh = 175;
void on_CornerHarris(int, void*);
int main(int argc, char** argv) {
Mat g_srcImage = imread("E:\\pictures\\For_Project\\New_opencv\\temple2.jpg", 1);
if (g_srcImage.empty()) {
printf("could not load image...\n");
return -1;
}
imshow("input image", g_srcImage);
g_srcImage1 = g_srcImage.clone();
cvtColor(g_srcImage1, g_grayImage, COLOR_BGR2GRAY);
namedWindow(WINDOW_NAME1, WINDOW_AUTOSIZE);
createTrackbar("阈值", WINDOW_NAME1, &thresh, max_thresh, on_CornerHarris);
on_CornerHarris(0, 0);
waitKey(0);
return 0;
}
void on_CornerHarris(int, void*) {
Mat dstImage;
Mat normImage;
Mat scaledImage;
dstImage = Mat::zeros(g_srcImage.size(), CV_32FC1);
g_srcImage1 = g_srcImage.clone();
cornerHarris(g_grayImage, dstImage, 2, 3, 0.04, BORDER_DEFAULT);
normalize(dstImage, normImage, 0, 255, NORM_MINMAX, CV_32FC1, Mat());
convertScaleAbs(normImage, scaledImage);
for (int j = 0; j < normImage.rows; j++) {
for (int i = 0; i < normImage.cols; i++) {
if ((int)normImage.at<float>(j, i) > thresh + 80) {
circle(g_srcImage1, Point(i, j), 5, Scalar(10, 10, 255), 2, 8, 0);
circle(scaledImage, Point(i, j), 5, Scalar(0, 10, 255), 2, 8, 0);
}
}
}
//imshow(WINDOW_NAME1, g_srcImage1);
imshow(WINDOW_NAME2, scaledImage);
}
opencv学习之角点检测
最新推荐文章于 2020-07-27 11:11:06 发布