본문 바로가기

OpenCV

ch14 corners

#python 

import cv2
import numpy as np

def corner_harris():
    src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch14\\corners\\building.jpg", cv2.IMREAD_GRAYSCALE)

    if src is None:
        print("Image load failed!")
        return

    harris = cv2.cornerHarris(src, 3, 3, 0.04)

    harris_norm = cv2.normalize(harris, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)

    dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)

    for j in range(1, harris.shape[0] - 1):
        for i in range(1, harris.shape[1] - 1):
            if harris_norm[j, i] > 120:
                if harris[j, i] > harris[j - 1, i] and \
                    harris[j, i] > harris[j + 1, i] and \
                    harris[j, i] > harris[j, i - 1] and \
                    harris[j, i] > harris[j, i + 1]:
                    cv2.circle(dst, (i, j), 5, (0, 0, 255), 2)

    cv2.imshow("src", src)
    cv2.imshow("harris_norm", harris_norm)
    cv2.imshow("dst", dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def corner_fast():
    src = cv2.imread("D:\\projects\\SampleCode\\006939-master\\ch14\\corners\\building.jpg", cv2.IMREAD_GRAYSCALE)

    if src is None:
        print("Image load failed!")
        return

    fast = cv2.FastFeatureDetector_create(60)
    keypoints = fast.detect(src, None)

    dst = cv2.cvtColor(src, cv2.COLOR_GRAY2BGR)

    for kp in keypoints:
        pt = (int(kp.pt[0]), int(kp.pt[1]))
        cv2.circle(dst, pt, 5, (0, 0, 255), 2)

    cv2.imshow("src", src)
    cv2.imshow("dst", dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

if __name__ == "__main__":
    corner_harris()
    corner_fast()

// C++

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace cv;
using namespace std;

void corner_harris();
void corner_fast();

int main(void)
{
	corner_harris();
	corner_fast();

	return 0;
}

void corner_harris()
{
	Mat src = imread("building.jpg", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	Mat harris;
	cornerHarris(src, harris, 3, 3, 0.04);

	Mat harris_norm;
	normalize(harris, harris_norm, 0, 255, NORM_MINMAX, CV_8U);

	Mat dst;
	cvtColor(src, dst, COLOR_GRAY2BGR);

	for (int j = 1; j < harris.rows - 1; j++) {
		for (int i = 1; i < harris.cols - 1; i++) {
			if (harris_norm.at<uchar>(j, i) > 120) {
				if (harris.at<float>(j, i) > harris.at<float>(j - 1, i) &&
					harris.at<float>(j, i) > harris.at<float>(j + 1, i) &&
					harris.at<float>(j, i) > harris.at<float>(j, i - 1) &&
					harris.at<float>(j, i) > harris.at<float>(j, i + 1) ) {
					circle(dst, Point(i, j), 5, Scalar(0, 0, 255), 2);
				}
			}
		}
	}

	imshow("src", src);
	imshow("harris_norm", harris_norm);
	imshow("dst", dst);

	waitKey(0);
	destroyAllWindows();
}

void corner_fast()
{
	Mat src = imread("building.jpg", IMREAD_GRAYSCALE);

	if (src.empty()) {
		cerr << "Image load failed!" << endl;
		return;
	}

	vector<KeyPoint> keypoints;
	FAST(src, keypoints, 60, true);

	Mat dst;
	cvtColor(src, dst, COLOR_GRAY2BGR);

	for (KeyPoint kp : keypoints) {
		Point pt(cvRound(kp.pt.x), cvRound(kp.pt.y));
		circle(dst, pt, 5, Scalar(0, 0, 255), 2);
	}

	imshow("src", src);
	imshow("dst", dst);

	waitKey(0);
	destroyAllWindows();
}

C++ Code 출처 : OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝 - 황선규 저


'OpenCV' 카테고리의 다른 글

ch14 matching  (0) 2024.05.22
ch14 keypoints  (0) 2024.05.22
ch13 template  (0) 2024.05.21
ch13 QRCode  (0) 2024.05.21
ch13 hog  (0) 2024.05.21