File size: 2,432 Bytes
730915d
 
aac3d7b
730915d
5b94904
 
aac3d7b
5b94904
730915d
5b94904
730915d
 
 
 
 
 
 
 
 
 
 
5b94904
730915d
 
 
 
5b94904
730915d
 
 
 
 
 
5b94904
730915d
 
 
 
 
 
 
 
 
 
aac3d7b
 
 
 
5b94904
aac3d7b
5b94904
 
aac3d7b
 
5b94904
 
aac3d7b
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import cv2
import numpy as np
import gradio as gr

def compare_images(original_image, adjusted_image):
    # Check if images are loaded correctly
    if original_image is None or adjusted_image is None:
        return "Error: One or both images could not be loaded.", None

    # Resize adjusted image to match original image dimensions
    original_image_resized = cv2.resize(original_image, (adjusted_image.shape[1], adjusted_image.shape[0]))

    # Step 1: Compare Dimensions
    original_height, original_width = original_image.shape[:2]
    adjusted_height, adjusted_width = adjusted_image.shape[:2]
    dimension_match = (original_height == adjusted_height) and (original_width == adjusted_width)

    # Step 2: Compare Brightness
    # Convert images to grayscale
    original_gray = cv2.cvtColor(original_image_resized, cv2.COLOR_BGR2GRAY)
    adjusted_gray = cv2.cvtColor(adjusted_image, cv2.COLOR_BGR2GRAY)

    # Calculate average brightness
    original_brightness = np.mean(original_gray)
    adjusted_brightness = np.mean(adjusted_gray)
    brightness_diff = abs(original_brightness - adjusted_brightness)
    brightness_match = brightness_diff < 10  # Allow small tolerance

    # Step 3: Highlight Differences
    # Subtract images to find differences
    difference = cv2.absdiff(original_gray, adjusted_gray)
    _, threshold_diff = cv2.threshold(difference, 30, 255, cv2.THRESH_BINARY)

    # Prepare result summary
    comparison_result = {
        "Dimension Match": "Yes" if dimension_match else "No",
        "Original Dimensions": f"{original_width}x{original_height}",
        "Adjusted Dimensions": f"{adjusted_width}x{adjusted_height}",
        "Brightness Match": "Yes" if brightness_match else "No",
        "Original Brightness": f"{original_brightness:.2f}",
        "Adjusted Brightness": f"{adjusted_brightness:.2f}",
        "Brightness Difference": f"{brightness_diff:.2f}",
    }

    return comparison_result, threshold_diff

# Gradio interface
iface = gr.Interface(
    fn=compare_images,
    inputs=[
        gr.Image(type="numpy", label="Original Image"),
        gr.Image(type="numpy", label="Adjusted Image")
    ],
    outputs=[
        gr.JSON(label="Comparison Result"),
        gr.Image(type="numpy", label="Difference Image")
    ],
    title="Image Comparison Tool",
    description="Upload two images to compare dimensions, brightness, and highlight differences."
)

iface.launch()