这里是Matlab的新手。我正在尝试实现一些代码来检测图像中的面部并裁剪它。我已经运行了脚本,但它放置在检测到的面部周围的边界框有点小。有没有办法更改边界框的尺寸以捕获更多的面?
#include<ctype.h>
if(isalpha(char[i]))
rank--;
if(isdigit(char[i]))
rank++;
这很好,我只想延长裁剪区域的边界以捕捉更多的脸部(例如,头发和下巴)。
答案 0 :(得分:3)
来自MATLAB矩形函数文档。
如果您只想通过关于矩形中心的某个比例因子来增加边界框,则可以缩放w
中的h
和BB
分量并调整矩形原点x
和y
减去一半的比例差异。如果您将代码放在代码中的BB = step(FaceDetect,img);
行之后,则以下代码应该可以正常工作。我目前没有MATLAB可用,但我很确定这会有效。
% Scale the rectangle to 1.2 times its original size
scale = 1.2;
% Adjust the lower left corner of the rectangles
BB(:,1:2) = BB(:,1:2) - BB(:,3:4)*0.5*(scale - 1)
% Adjust the width and height of the rectangles
BB(:,3:4) = BB(:,3:4)*scale;
答案 1 :(得分:0)
您可以使用此 link 和 bboxresize 中所述的 Matlab 中的 imresize 函数来调整边界框的大小 以下是将图像大小调整为原始图像大小的 3 倍的简单代码
%% clean workspace
clc;
clear;
cd 'C:\Users\abc\Desktop\folder';
files = dir('*.jpg');
for file = files'
img = imread(file.name) ;
figure(1),imshow(img);
FaceDetect = vision.CascadeObjectDetector;
FaceDetect.MergeThreshold =7;
BB = step(FaceDetect,img);
BB2 = BB;
%% Scale the rectangle to 3 times its original size
scale = 3;
%% Resize image
ImgResized = imresize(img,scale);
%% Resize bound box using the function named bboxresize in Matlab
BBResized = bboxresize(BB,scale);
figure(2),imshow(ImgResized);
%% Draw Bounding Box
for i=1:size(BBResized,1)
rectangle('position',BBResized(i,:),'lineWidth',2,'LineStyle','- ','EdgeColor','y');
end
end