2016-01-19 25 views
2

我使用Matlab和Kinect传感器处理一个项目。我有功能为Kinect传感器拍摄照片进行训练。问题是我想用Skeleton将图片保存在视频中显示的数据集中。它只保存没有骨架的图片。用骷髅保存Kinect,Matlab和图片

我认为这是错误的地方这个行:

imwrite(img, fullfile(fileLocation,sprintf('Picture%d.png', nImages))); 

,而不是IMG,必须是别的东西。

预先感谢您。

我的代码是:

function Sample(MainFolderName, ObjectFolderName,delay) 


if nargin < 3 
    delay = 0.1; 
end 

videoC = videoinput('kinect',1); 
videoDepth = videoinput('kinect',2); 


%% Skeleton info 
triggerconfig(videoDepth,'manual'); 
videoDepth.FramesPerTrigger=1; 
videoDepth.Triggerrepeat=inf; 
set(getselectedsource(videoDepth),'TrackingMode','Skeleton') 

start(videoDepth); 
for i=1:100 
    trigger(videoDepth); 
    [depthMap,~,depthMetaData]=getdata(videoDepth); 
    imshow(depthMap,[0 4000]); 
end 

%% 
skeletonJoint=depthMetaData.JointImageIndices(:,:,depthMetaData.IsSkeletonTracked); 
imshow(depthMap,[0 4000]); 
hold on; plot(skeletonJoint(:,1),skeletonJoint(:,2),'*'); 
stop(videoDepth); 

%% Draw and track skeleton 
triggerconfig(videoC,'manual'); 
videoC.FramesPerTrigger=1; 
videoC.Triggerrepeat=inf; 
start(videoDepth); 
start(videoC); 

%% Create folder with label name 
fileLocation = fullfile(MainFolderName,ObjectFolderName); 
if ~exist(ObjectFolderName,'file') 
    mkdir(fileLocation) 
end 

%% Take pictures 
nImages = 1; 
fig = figure('Name','Pictures for training','NumberTitle','off'); 
ax = axes('Parent',fig); 
try 
    while ishandle(fig) 
     pause(delay); 
     trigger(videoC); 
     trigger(videoDepth); 
%   [frameDataColor] = getdata(videoUlaz); 
      img = getdata(videoC); 
%   image = frameDataColor(:,:); 
    [depthMap,~,depthMetaData]=getdata(videoDepth); 
    if sum(depthMetaData.IsSkeletonTracked)>0 
     skeletonJoints=depthMetaData.JointImageIndices(:,:,depthMetaData.IsSkeletonTracked); 
      util_skeletonViewer(skeletonJoints,img,1); 
     imwrite(img, fullfile(fileLocation,sprintf('Picture%d.png', nImages))); 
     title(sprintf('Number: %3.0f',nImages)) 
     nImages = nImages+1; 
%  else 
%  imshow(img); 
    end 
    end 
    stop(videoC); 
    stop(videoDepth); 
    imaqreset; 
catch 
    imaqreset; 
end 
%% Display Info 
nImages = size(ls(fullfile(fileLocation,'*.png')),1); 
disp('---------Training images!---------') 
disp(['Name: ',ObjectFolderName]) 
disp(['Nubmer: ',num2str(nImages)]) 
disp(['Location: ',fullfile(pwd,fileLocation)]) 
+0

请添加您想要获得的输出的示例图片 –

回答

0

改变这一行:

imwrite(img, fullfile(fileLocation,sprintf('Picture%d.png', nImages))); 

这些:

frame = getframe; 
imwrite(frame.cdata, fullfile(fileLocation,sprintf('Picture%d.png', nImages))); 

N.B:我假设你util_skeletonViewerthis one

+0

非常感谢。现在正在工作。 – Adon