#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 |