2016-03-18 53 views
1

我是MATLAB新手。我需要捕捉图像并将其保存到文件夹中。这是我用于检测脸部的matlab代码。使用网络摄像头捕获检测到的脸部图像?

% Create the face detector object. 
faceDetector = vision.CascadeObjectDetector(); 

% Create the point tracker object. 
pointTracker = vision.PointTracker('MaxBidirectionalError', 2); 

% Create the webcam object. 
cam = webcam(); 

% Capture one frame to get its size. 
videoFrame = snapshot(cam); 
frameSize = size(videoFrame); 

% Create the video player object. 
videoPlayer = vision.VideoPlayer('Position', [100 100 [frameSize(2), frameSize(1)]+30]); 

runLoop = true; 
numPts = 0; 
frameCount = 0; 
%%x = 0; 
while runLoop && frameCount < 400 

%% while(x<1) 
    % Get the next frame. 
    videoFrame = snapshot(cam); 
    videoFrameGray = rgb2gray(videoFrame); 
    frameCount = frameCount + 1; 

    if numPts < 10 
     % Detection mode. 
     bbox = faceDetector.step(videoFrameGray); 

     if ~isempty(bbox) 
      % Find corner points inside the detected region. 
      points = detectMinEigenFeatures(videoFrameGray, 'ROI', bbox(1, :)); 

      % Re-initialize the point tracker. 
      xyPoints = points.Location; 
      numPts = size(xyPoints,1); 
      release(pointTracker); 
      initialize(pointTracker, xyPoints, videoFrameGray); 

      % Save a copy of the points. 
      oldPoints = xyPoints; 

      % the orientation of the face. 
      bboxPoints = bbox2points(bbox(1, :)); 

      % Convert the box corners into the [x1 y1 x2 y2 x3 y3 x4 y4] 
      % format required by insertShape. 
      bboxPolygon = reshape(bboxPoints', 1, []); 

      % Display a bounding box around the detected face. 
      videoFrame = insertShape(videoFrame, 'Polygon', bboxPolygon, 'LineWidth', 3); 

      % Display detected corners. 
      videoFrame = insertMarker(videoFrame, xyPoints, '+', 'Color', 'white'); 
     end 

    else 
     % Tracking mode. 
     [xyPoints, isFound] = step(pointTracker, videoFrameGray); 
     visiblePoints = xyPoints(isFound, :); 
     oldInliers = oldPoints(isFound, :); 

     numPts = size(visiblePoints, 1); 

     if numPts >= 10 
      % Estimate the geometric transformation between the old points 
      % and the new points. 
      [xform, oldInliers, visiblePoints] = estimateGeometricTransform(... 
       oldInliers, visiblePoints, 'similarity', 'MaxDistance', 4); 

      % Apply the transformation to the bounding box. 
      bboxPoints = transformPointsForward(xform, bboxPoints); 

      % Convert the box corners into the [x1 y1 x2 y2 x3 y3 x4 y4] 
      % format required by insertShape. 
      bboxPolygon = reshape(bboxPoints', 1, []); 

      % Display a bounding box around the face being tracked. 
      videoFrame = insertShape(videoFrame, 'Polygon', bboxPolygon, 'LineWidth', 3); 

      % Display tracked points. 
      videoFrame = insertMarker(videoFrame, visiblePoints, '+', 'Color', 'white'); 

      % Reset the points. 
      oldPoints = visiblePoints; 
      setPoints(pointTracker, oldPoints); 
     end 

    end 

    % Display the annotated video frame using the video player object. 
    step(videoPlayer, videoFrame); 

    % Check whether the video player window has been closed. 
    runLoop = isOpen(videoPlayer); 
end 

% Clean up. 
clear cam; 
release(videoPlayer); 
release(pointTracker); 
release(faceDetector); 

请帮我拍摄图像并保存。

我试图捕捉图像的代码并保存

vid = videoinput('dcam',1,'RGB24_640x480'); 
preview(vid); 
start(vid); 
im=getdata(vid); 
figure,imshow(im); 
write(im,'test1image.jpg'); 

当我尝试这个代码,它提供了与错误,使用videoinput(线233) 没有安装指定的设备

错误ADAPTORNAME。请参阅IMAQHWINFO。

图像中的错误(第1行) vid = videoinput('dcam',1,'RGB24_640x480');

+1

问题是ovbious:MATLAB无法检测到任何名为'dcam'的摄像头 –

+0

我也使用'winvideo'。它也给出了错误。 imaqhwinfo ANS = InstalledAdaptors:{ 'DCAM'​​} MATLABVersion: '8.6(R2015b)' ToolboxName: '图像采集工具箱' ToolboxVersion: '4.10(R2015b)' – Kasuni

+1

当你做videoinput会发生什么( 'dcam')?我无法重新创建您的错误。 – GameOfThrows

回答

1

您可能需要为您的特定相机下载图像采集工具箱的support package。如果您使用的是普通的USB摄像头,那么您可能需要“OS通用视频接口”支持包。

+0

我已经这样做了。 – Kasuni

+1

难道你没有DCAM相机?你可以尝试安装“OS通用视频接口”支持包吗? – Dima

+0

感谢您的支持。现在我安装了“OS通用视频接口”。我的代码正在工作。 – Kasuni

相关问题