File size: 2,042 Bytes
002bd9b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import cv2
import numpy as np
import random

def detect_green_rectangles(image_path):
    image = cv2.imread(image_path)
    if image is None:
        print(f"Image {image_path} could not be read.")
        return [], None

    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    lower_green = np.array([40, 40, 40])
    upper_green = np.array([80, 255, 255])
    mask = cv2.inRange(hsv, lower_green, upper_green)
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    
    bboxes = []
    for contour in contours:
        epsilon = 0.02 * cv2.arcLength(contour, True)
        approx = cv2.approxPolyDP(contour, epsilon, True)
        if len(approx) == 4:
            x, y, w, h = cv2.boundingRect(approx)
            if w > 20 and h > 20:
                bboxes.append([x, y, w, h])
    
    return bboxes, image

def test_detection(image_dir, output_dir, K):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    image_files = [f for f in os.listdir(image_dir) if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
    random.shuffle(image_files)
    
    for i, image_file in enumerate(image_files[:K]):
        image_path = os.path.join(image_dir, image_file)
        bboxes, image = detect_green_rectangles(image_path)
        
        if image is None:
            continue
        
        for bbox in bboxes:
            x, y, w, h = bbox
            color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
            cv2.rectangle(image, (x, y), (x+w, y+h), color, 2)
        
        output_path = os.path.join(output_dir, f"test_output_{i+1}.png")
        cv2.imwrite(output_path, image)
        
        print(f"Processed {image_file}: {len(bboxes)} green rectangles detected")

    print(f"Processed {K} images. Results saved in {output_dir}")

# Example usage
image_dir = '/workspace/mimic_cxr'
test_output_dir = '/workspace/test_output'
K = 10  # Number of images to test

# Run the test function
test_detection(image_dir, test_output_dir, K)