Files
004_comission/vinniesniper-54816/task1/_lab/001-test-integration/compareImgs_hist_rgb.py
louiscklaw b1cd1d4662 update,
2025-01-31 22:56:58 +08:00

50 lines
1.4 KiB
Python

import cv2 as cv
import numpy as np
img_cache = {}
hist_rgb_cache = {}
def readImage(img_path):
global img_cache
if img_path in img_cache.keys():
pass
else:
# read image
img_test_rgb = cv.imread(img_path)
# convert to gray scale
img_test_rgb = cv.resize(img_test_rgb, (1024, 1024))
img_cache[img_path] = img_test_rgb
return img_cache[img_path]
def cachedCvCalcHist(img2_path, channel, num_bins):
global hist_rgb_cache
img_input = readImage(img2_path)
if tuple([img2_path, channel, num_bins]) in hist_rgb_cache.keys():
return hist_rgb_cache[tuple([img2_path, channel, num_bins])]
else:
hist = cv.calcHist([img_input], [channel], None, [num_bins], [0, 255])
hist_rgb_cache[tuple([img2_path, channel, num_bins])] = hist
return hist
def compareImgs_hist_rgb(img1_path, img2_path, num_bins=10):
total_diff = 0
for channel in range(3): # Iterate over RGB channels
# hist1 = cv.calcHist([img1], [channel], None, [num_bins], [0, 255])
# hist2 = cv.calcHist([img2], [channel], None, [num_bins], [0, 255])
hist1 = cachedCvCalcHist(img1_path, channel, num_bins)
hist2 = cachedCvCalcHist(img2_path, channel, num_bins)
channel_diff = np.sum(np.abs(hist1 - hist2))
total_diff += channel_diff
return total_diff / (3 * float(1024 * 1024))