MATLAB. Раскрасьте область вокруг ограничивающей рамки черным цветом

У меня есть код, который обнаруживает лицо на изображении и размещает ограничивающую рамку вокруг изображения, как показано ниже.введите описание изображения здесь

Но я хочу пойти дальше и покрасить область за пределами ограничивающей рамки в черный цвет, чтобы было видно только лицо, а фон стал черным. Оригинальный код..

FDetect = vision.CascadeObjectDetector;
I = imread('PresidentClinton.jpg');

%Returns Bounding Box values based on number of objects
BB = step(FDetect,I);

figure,
imshow(I); hold on
for i = 1:size(BB,1)
rectangle('Position',BB(i,:),'LineWidth',5,'LineStyle','-','EdgeColor','r');
end
title('Face Detection');
hold off;

person Princesden    schedule 07.10.2014    source источник


Ответы (1)


Вот простой метод, в котором вы сначала создаете целевое изображение того же размера/класса, что и исходное изображение, и заливаете его черным цветом. Затем вы получаете координаты прямоугольника и назначаете данные исходного изображения целевому изображению:

clear
close all

A = imread('peppers.png');
B = zeros(size(A),class(A)); % //Pre-define target image of identical size and class than original.

%// You could also use this line: 
%//B = zeros(size(A),'like',A);


hRect = rectangle('Position',[100 100 200 160],'LineWidth',3); %// Define rectangle

RectPos = get(hRect, 'Position'); %// Get the coordinates of the rectangle.

x = RectPos(1):RectPos(1)+RectPos(3); %// Define x- and y-span
y = RectPos(2):RectPos(2)+RectPos(4);

B(x,y,:) = A(x,y,:); %// Assign the selected part of the image to B

figure
subplot(1,2,1)
imshow(A)
subplot(1,2,2)
imshow(B)

Давать что-то вроде этого:

введите здесь описание изображения

Конечно, есть и другие способы, но я думаю, что этот простой и его легко реализовать в цикле.

person Benoit_11    schedule 07.10.2014
comment
так это то, что вы были после? - person Benoit_11; 09.10.2014