From 625f61ca4fb496f2d9ce2815f0b77a1f4f215011 Mon Sep 17 00:00:00 2001 From: Denys Seredenko Date: Wed, 16 Oct 2024 17:26:54 +0200 Subject: [PATCH] added FV generator for edges,corners,counters --- edges-corners-counters.py | 50 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 edges-corners-counters.py diff --git a/edges-corners-counters.py b/edges-corners-counters.py new file mode 100644 index 0000000..1cbb265 --- /dev/null +++ b/edges-corners-counters.py @@ -0,0 +1,50 @@ +import cv2 +import numpy as np +from os import walk +import csv + +def detect_corners(gray_image, max_corners=100, quality_level=0.14, min_distance=1): + corners = cv2.goodFeaturesToTrack(cv2.blur(gray_image, (5,5)), maxCorners=max_corners, qualityLevel=quality_level, minDistance=min_distance) + if corners is not None: + corners = np.int0(corners) + return len(corners), corners + else: + return 0, [] + +def detect_edges(gray_image): + edges = cv2.Canny(cv2.blur(gray_image, (5,5)), threshold1=100, threshold2=200) + edge_count = np.count_nonzero(edges) + return edge_count, edges + + + +def detect_contours(edge_image): + contours, _ = cv2.findContours(edge_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) + contour_count = len(contours) + return contour_count, contours + + +def feature_vector(image_path): + resultVector = {} + img = cv2.imread(image_path) + image_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) + + corners_count, _ = detect_corners(image_gray) + edges_count, edges = detect_edges(image_gray) + contours_count, _ = detect_contours(edges) + + resultVector["corners"] = corners_count % 100 + resultVector["edges"] = edges_count / 1000 + resultVector["contours"] = contours_count * 0.1 + + return resultVector + + +filenames = next(walk("images"), (None, None, []))[2] # [] if no file + +with open('dict.csv', 'w') as csv_file: + writer = csv.DictWriter(csv_file, fieldnames=['corners', 'edges', 'contours']) + writer.writeheader() + for filename in filenames: + result = feature_vector(f'images/{filename}') + writer.writerow(result) \ No newline at end of file