2017-05-27 24 views
0

顔画像のすべての顔ランドマークを抽出し、その画像を自分のディレクトリに保存しようとしています。私の場合、私はこれらのステップに従わなければならない。顔ランドマーク検出アルゴリズム、出力画像が消えるC++、Dlib

  1. 入力画像
  2. は顔ROIその後
  3. DLIBが私のディレクトリにその画像保存画像
  4. にオーバーレイを追加
  5. 顔のランドマークを抽出使用を抽出

私は必要な出力を与えるこのC++コードを試しました。しかし、オーバーレイされた画像を表示した後、それは非常に迅速に消える。誰でもこのコードで間違ったことを教えてもらえますか?

#include <dlib\opencv\cv_image.h> 
#include <opencv2/highgui/highgui.hpp> 
#include <dlib/image_processing/frontal_face_detector.h> 
#include <dlib/image_processing/render_face_detections.h> 
#include <dlib/image_processing.h> 
#include <dlib/gui_widgets.h> 

using namespace dlib; 
using namespace std; 
using namespace cv; 

int main() 
{ 
    try 
    { 

     cv::Mat src1; 
     src1 = imread("obama.jpg", CV_LOAD_IMAGE_COLOR); 

     //image_window win, win_faces; 
     image_window win; 
     Mat atom_image = Mat::zeros(500, 500, CV_8UC3); 


     // Load face detection and pose estimation models. 
     frontal_face_detector detector = get_frontal_face_detector(); 
     shape_predictor pose_model; 
     deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; 

      //cv::Mat temp; 
      //temp = src1; 

      cv_image<bgr_pixel> cimg(src1); 
      cv_image<bgr_pixel> black(atom_image); 
      // Detect faces 
      std::vector<rectangle> faces = detector(cimg); 

      cout << "Number of faces detected: " << faces.size() << endl; 

      // Find the pose of each face. 
      std::vector<full_object_detection> shapes; 
      //for (int i = 0; i < faces.size(); i++) { 
       //shapes.push_back(pose_model(cimg, faces[i])); 


       full_object_detection shape = pose_model(cimg, faces[0]); 


       shapes.push_back(pose_model(cimg, faces[0])); 


       //const full_object_detection& d = shapes[0]; 
       //ofstream outputfile; 
       //outputfile.open("data1.txt"); 


       cout << "pixel position of first part: " << shape.part(2) << endl; 

      // Display it all on the screen 
      //win.clear_overlay(); 
      win.set_image(cimg); 
      win.add_overlay(render_face_detections(shapes)); 

    } 
    catch (serialization_error& e) 
    { 
     cout << "You need dlib's default face landmarking model file to run this example." << endl; 
     cout << "You can get it from the following URL: " << endl; 
     cout << " http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2" << endl; 
     cout << endl << e.what() << endl; 
    } 
    catch (exception& e) 
    { 
     cout << e.what() << endl; 
    } 
} 

答えて

1

イメージウィンドウは保持していません。行うための簡単な方法は、私はあなたが質問で述べたように、あなたがカレントディレクトリに出力を保存している任意のコードが表示されない、また

win.set_image(cimg); 
win.add_overlay(render_face_detections(shapes)); 
waitKey(0); 

だろう。あなたはimwriteを見るかもしれません。

関連する問題