Kinect,Matlab和图片保存与骨架



我用Matlab和Kinect传感器做一个项目。我有从 Kinect 传感器为培训拍照的功能。问题是我想将带有骨架的图片保存在数据集(如视频所示)中的图片上。它只保存没有骨架的图片。

我认为错误在于这一行的某个地方:

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)])

更改此行:

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

有了这些:

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

注意:我假设你的util_skeletonViewer就是这个。

最新更新