66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
import cv2
|
||
import numpy as np
|
||
from Image_Process.Image_Mask_Ground_Truth_Processing import XMLAnnotationProcessor
|
||
|
||
def test_bounding_box_processing_with_mock_data():
|
||
# 初始化XML處理器
|
||
processor = XMLAnnotationProcessor()
|
||
|
||
# 創建一個測試圖像 (300x300 彩色圖像)
|
||
test_image = np.ones((300, 300, 3), dtype=np.uint8) * 128 # 灰色背景
|
||
|
||
# 在圖像中央創建一個彩色區域
|
||
test_image[100:200, 100:200, 0] = 255 # 紅色通道
|
||
test_image[120:180, 120:180, 1] = 255 # 綠色通道
|
||
test_image[140:160, 140:160, 2] = 255 # 藍色通道
|
||
|
||
# 創建模擬的bounding box數據
|
||
mock_bounding_boxes = [
|
||
{
|
||
'name': 'test_object',
|
||
'xmin': 50,
|
||
'ymin': 50,
|
||
'xmax': 150,
|
||
'ymax': 150
|
||
},
|
||
{
|
||
'name': 'test_object2',
|
||
'xmin': 200,
|
||
'ymin': 200,
|
||
'xmax': 250,
|
||
'ymax': 250
|
||
}
|
||
]
|
||
|
||
# 調用draw_bounding_boxes方法
|
||
result_image = processor.draw_bounding_boxes(test_image, mock_bounding_boxes)
|
||
|
||
# 顯示處理結果
|
||
print(f"原始圖像形狀: {test_image.shape}")
|
||
print(f"結果圖像形狀: {result_image.shape}")
|
||
|
||
# 檢查圖像是否有非黑色區域(bounding box內的原圖)
|
||
non_black_pixels = np.sum(result_image > 0)
|
||
print(f"非黑色像素數量: {non_black_pixels}")
|
||
|
||
# 檢查第一個bounding box區域是否保留了原圖
|
||
box1 = result_image[50:150, 50:150]
|
||
box1_matches = np.array_equal(box1, test_image[50:150, 50:150])
|
||
print(f"第一個bounding box區域是否與原圖相同: {box1_matches}")
|
||
|
||
# 檢查框外區域是否為黑色
|
||
outside_box = result_image[0:40, 0:40] # 選擇一個框外區域
|
||
is_black = np.sum(outside_box) == 0
|
||
print(f"框外區域是否為黑色: {is_black}")
|
||
|
||
if non_black_pixels > 0 and box1_matches and is_black:
|
||
print("測試成功: bounding box內保持原圖,框外變為黑色")
|
||
else:
|
||
print("測試失敗")
|
||
|
||
# 保存結果圖像以便查看
|
||
cv2.imwrite("test_bounding_box_result.png", result_image)
|
||
print("已保存結果圖像: test_bounding_box_result.png")
|
||
|
||
if __name__ == "__main__":
|
||
test_bounding_box_processing_with_mock_data() |