Files
StreetsignRecognition/edges-corners-counters.py
2024-10-16 17:27:48 +02:00

50 lines
1.6 KiB
Python

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)