Проблема: у меня есть несколько изображений (в виде цифры), которые имеют черный фон. Посередине у меня есть объект, который меня интересует. Я бы хотел обрезать интересующий объект в виде кучи.
Допустим, у нас есть изображение, которое выглядит примерно так:
Мне нужна функция crop_region_of_interest
, которая обнаруживает и удаляет любые оси X и Y, если вся ось черная или [0,0,0], вЧтобы получить это:
Некоторые коды, используемые в этой демонстрации:
# just a function to add colors to generate test image
def add_color(img, pixel_x, pixel_y, rgb):
img[pixel_x][pixel_y][0] = rgb[0]
img[pixel_x][pixel_y][1] = rgb[1]
img[pixel_x][pixel_y][2] = rgb[2]
def generate_fake_image_for_stackoverflow():
# a black background image
base_img = np.zeros((16,16,3), dtype=int)
# lets add some colors, these are the region we want
for x in range(4,10):
for y in range(6,12):
if(x==y):
continue
if(x+y<12):
continue
if(x+y>16):
continue
add_color(base_img, x,y, [255,60,90])
return base_img
# a hardcoded cropped to generate expected result
def crop_region_of_interest(img):
# crop first axis
cropped = img[4:10]
# transpose to second axis, so can crop
cropped = cropped.transpose((1,0,2))
cropped = cropped[6:12]
# transpose back
cropped = cropped.transpose((1,0,2))
cropped = cropped.transpose((1,0,2))
cropped = cropped.transpose((1,0,2))
return cropped
img = generate_fake_image_for_stackoverflow() # to generate a test image
plt.imshow(img)
plt.show()
cropped = crop_region_of_interest(img) # a hardcoded cropped to generate expected result, this to be replaced
plt.imshow(cropped)
plt.show()