AlexeyAB
2017-10-23 84d6533cb8112f23a34d3de76435a10f4620f4b8
src/image.c
@@ -518,7 +518,7 @@
}
void show_image_cv_ipl(IplImage *disp, const char *name)
void show_image_cv_ipl(IplImage *disp, const char *name, const char *out_filename)
{
   if (disp == NULL) return;
   char buff[256];
@@ -529,7 +529,7 @@
   ++windows;
   cvShowImage(buff, disp);
   if(out_filename)
   {
      CvSize size;
      {
@@ -539,10 +539,14 @@
      static CvVideoWriter* output_video = NULL;    // cv::VideoWriter output_video;
      if (output_video == NULL)
      {
         const char* output_name = "test_dnn_out.avi";
         //output_video = cvCreateVideoWriter(output_name, CV_FOURCC('H', '2', '6', '4'), 25, size, 1);
         output_video = cvCreateVideoWriter(output_name, CV_FOURCC('D', 'I', 'V', 'X'), 25, size, 1);
         //output_video = cvCreateVideoWriter(output_name, CV_FOURCC('M', 'J', 'P', 'G'), 25, size, 1);
         //const char* output_name = "test_dnn_out.avi";
         //output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('H', '2', '6', '4'), 25, size, 1);
         output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('D', 'I', 'V', 'X'), 25, size, 1);
         //output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('M', 'J', 'P', 'G'), 25, size, 1);
         //output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('M', 'P', '4', 'V'), 25, size, 1);
         //output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('M', 'P', '4', '2'), 25, size, 1);
         //output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('X', 'V', 'I', 'D'), 25, size, 1);
         //output_video = cvCreateVideoWriter(out_filename, CV_FOURCC('W', 'M', 'V', '2'), 25, size, 1);
      }
      cvWriteFrame(output_video, disp);   // comment this line to improve FPS !!!
@@ -879,6 +883,51 @@
#endif
}
void fill_image(image m, float s)
{
   int i;
   for (i = 0; i < m.h*m.w*m.c; ++i) m.data[i] = s;
}
void letterbox_image_into(image im, int w, int h, image boxed)
{
   int new_w = im.w;
   int new_h = im.h;
   if (((float)w / im.w) < ((float)h / im.h)) {
      new_w = w;
      new_h = (im.h * w) / im.w;
   }
   else {
      new_h = h;
      new_w = (im.w * h) / im.h;
   }
   image resized = resize_image(im, new_w, new_h);
   embed_image(resized, boxed, (w - new_w) / 2, (h - new_h) / 2);
   free_image(resized);
}
image letterbox_image(image im, int w, int h)
{
   int new_w = im.w;
   int new_h = im.h;
   if (((float)w / im.w) < ((float)h / im.h)) {
      new_w = w;
      new_h = (im.h * w) / im.w;
   }
   else {
      new_h = h;
      new_w = (im.w * h) / im.h;
   }
   image resized = resize_image(im, new_w, new_h);
   image boxed = make_image(w, h, im.c);
   fill_image(boxed, .5);
   //int i;
   //for(i = 0; i < boxed.w*boxed.h*boxed.c; ++i) boxed.data[i] = 0;
   embed_image(resized, boxed, (w - new_w) / 2, (h - new_h) / 2);
   free_image(resized);
   return boxed;
}
image resize_max(image im, int max)
{
    int w = im.w;
@@ -1153,7 +1202,7 @@
void random_distort_image(image im, float hue, float saturation, float exposure)
{
    float dhue = rand_uniform(-hue, hue);
    float dhue = rand_uniform_strong(-hue, hue);
    float dsat = rand_scale(saturation);
    float dexp = rand_scale(exposure);
    distort_image(im, dhue, dsat, dexp);
@@ -1305,9 +1354,16 @@
image load_image(char *filename, int w, int h, int c)
{
#ifdef OPENCV
    image out = load_image_cv(filename, c);
#ifndef CV_VERSION_EPOCH
   image out = load_image_stb(filename, c);  // OpenCV 3.x
   //image out = load_image_cv(filename, c);
#else
    image out = load_image_stb(filename, c);
   image out = load_image_cv(filename, c);      // OpenCV 2.4.x
#endif
#else
    image out = load_image_stb(filename, c); // without OpenCV
#endif
    if((h && w) && (h != out.h || w != out.w)){