2014-10-07 188 views
1

我有一个代码可以检测图像中的人脸并将边界框围绕图像放置,如下所示。 enter image description hereMATLAB - 使用黑色围着边界框的颜色区域

但是我想更进一步,将边界框外的区域着色为黑色,以便只能看到脸部并且背景变黑。 原始代码..

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; 

回答

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) 

给予这样的事情:

enter image description here

当然也有其他的方式,但我认为这一个是简单易行的循环实现。

+0

所以这是你以后? – 2014-10-08 21:10:45