diff options
author | crupest <crupest@outlook.com> | 2022-06-02 22:42:29 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-06-02 22:42:29 +0800 |
commit | 82ca9e11965bce800ed5d500ab9c7dbc9ac3aa77 (patch) | |
tree | 95da17635e717207b30b414439cfda224e197c71 /works/life | |
parent | 369ad4403d70cea7dcb9cdb398c971a346c04c32 (diff) | |
download | crupest-82ca9e11965bce800ed5d500ab9c7dbc9ac3aa77.tar.gz crupest-82ca9e11965bce800ed5d500ab9c7dbc9ac3aa77.tar.bz2 crupest-82ca9e11965bce800ed5d500ab9c7dbc9ac3aa77.zip |
import(life): ...
Diffstat (limited to 'works/life')
-rw-r--r-- | works/life/digital-image-process-lab/CMakeLists.txt | 3 | ||||
-rw-r--r-- | works/life/digital-image-process-lab/HarrisCornerDetector.cpp | 49 |
2 files changed, 52 insertions, 0 deletions
diff --git a/works/life/digital-image-process-lab/CMakeLists.txt b/works/life/digital-image-process-lab/CMakeLists.txt index 5c2d05b..8a00ca5 100644 --- a/works/life/digital-image-process-lab/CMakeLists.txt +++ b/works/life/digital-image-process-lab/CMakeLists.txt @@ -15,3 +15,6 @@ target_link_libraries(DiscreteFourierTransform ${OpenCV_LIBS}) add_executable(MorphologicalTransformation MorphologicalTransformation.cpp) target_link_libraries(MorphologicalTransformation ${OpenCV_LIBS}) + +add_executable(HarrisCornerDetector HarrisCornerDetector.cpp) +target_link_libraries(HarrisCornerDetector ${OpenCV_LIBS}) diff --git a/works/life/digital-image-process-lab/HarrisCornerDetector.cpp b/works/life/digital-image-process-lab/HarrisCornerDetector.cpp new file mode 100644 index 0000000..c7013be --- /dev/null +++ b/works/life/digital-image-process-lab/HarrisCornerDetector.cpp @@ -0,0 +1,49 @@ +#include <opencv2/highgui.hpp> +#include <opencv2/imgproc.hpp> + +#include <iostream> + +cv::Mat src, src_gray; +int thresh = 100; +int max_thresh = 255; +const char *source_window = "Source image"; +const char *corners_window = "Corners detected"; +void cornerHarris_demo(int, void *); +int main(int argc, char **argv) { + cv::CommandLineParser parser(argc, argv, + "{@input | building.jpg | input image}"); + src = cv::imread(cv::samples::findFile(parser.get<cv::String>("@input"))); + if (src.empty()) { + std::cout << "Could not open or find the image!\n" << std::endl; + std::cout << "Usage: " << argv[0] << " <Input image>" << std::endl; + return -1; + } + cvtColor(src, src_gray, cv::COLOR_BGR2GRAY); + cv::namedWindow(source_window); + cv::createTrackbar("Threshold: ", source_window, &thresh, max_thresh, + cornerHarris_demo); + cv::imshow(source_window, src); + cornerHarris_demo(0, 0); + cv::waitKey(); + return 0; +} + +void cornerHarris_demo(int, void *) { + int blockSize = 2; + int apertureSize = 3; + double k = 0.04; + cv::Mat dst = cv::Mat::zeros(src.size(), CV_32FC1); + cv::cornerHarris(src_gray, dst, blockSize, apertureSize, k); + cv::Mat dst_norm, dst_norm_scaled; + normalize(dst, dst_norm, 0, 255, cv::NORM_MINMAX, CV_32FC1, cv::Mat()); + convertScaleAbs(dst_norm, dst_norm_scaled); + for (int i = 0; i < dst_norm.rows; i++) { + for (int j = 0; j < dst_norm.cols; j++) { + if ((int)dst_norm.at<float>(i, j) > thresh) { + circle(dst_norm_scaled, cv::Point(j, i), 5, cv::Scalar(0), 2, 8, 0); + } + } + } + cv::namedWindow(corners_window); + cv::imshow(corners_window, dst_norm_scaled); +} |