aboutsummaryrefslogtreecommitdiff
path: root/works/life
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-06-02 22:42:29 +0800
committercrupest <crupest@outlook.com>2022-06-02 22:42:29 +0800
commit82ca9e11965bce800ed5d500ab9c7dbc9ac3aa77 (patch)
tree95da17635e717207b30b414439cfda224e197c71 /works/life
parent369ad4403d70cea7dcb9cdb398c971a346c04c32 (diff)
downloadcrupest-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.txt3
-rw-r--r--works/life/digital-image-process-lab/HarrisCornerDetector.cpp49
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);
+}