воскресенье, 27 октября 2013 г.

Обновление dlib.image

В dlib.image появилась возможность отслеживать прогресс во время работы фильтров. Для этого используется многопоточность - необходимо создать класс-враппер, наследующий от FilteringThread. Прогресс (от 0 до 1) считывается из свойства progress для SuperImage. В данном примере показано, как использовать эту функциональность для вывода прогресса свертки в консоль:

import std.stdio;
import dlib.image.image;
import dlib.image.io.png;
import dlib.image.filters.convolution;
import dlib.image.fthread;

class ConvolutionThread: FilteringThread
{
    float[] kernel;
    
    this(SuperImage img, float[] k)
    {
        super(img);
        kernel = k;
    }
    
    override void run()
    {
        output = image.convolve(kernel);
    }
    
    override void onRunning()
    {
        writef("Convolving %s%%", cast(uint)(image.progress * 100));
        write("\r");
        stdout.flush();
    }
    
    override void onFinished()
    {
        writeln();
    }
}

void main()
{
    auto img = loadPNG("test.png");
    img = (new ConvolutionThread(img, Kernel.Emboss)).filtered;
    img.savePNG("output.png");
}

2 комментария:

  1. Я новичок, поэтому, скорее всего, упускаю какой-то момент в использовании библиотеки DLib на языке программирования D.

    Но вот мне понадобилось написать задачу рисования точки и линии на изображении залитом определенным цветом и потом сохранить полученное изображение в файле. И у меня никак не получается это реализовать(

    То есть мне нужно в начале создать пустое изображение размером w и h.
    Потом залить его определенным цветом.
    Далее нарисовать там точку.
    Далее нарисовать прямой отрезок с концами в двух заданных точках.

    "
    SuperImage image = createSameFormat(720, 1280);

    image[px, py] = Color4f(0x07e5f8, 0, 0);
    savePNG(image, format("img/frame_%04d.png", i));
    "

    Подскажите как это можно сделать на примере.

    Заранее спасибо.

    ОтветитьУдалить
    Ответы
    1. Если вопрос все еще актуален, то вот:

      import dlib.image;

      void main()
      {
      SuperImage img = image(512, 512, 4);
      fillColor(img, color4(0x000000ff));
      Color4f drawColor = color4(0x07e5f8ff);
      img[256, 256] = drawColor;
      drawLine(img, drawColor, 280, 280, 511, 511);
      savePNG(img, "output.png");
      }

      Блог переехал на https://gamedev.timurgafarov.ru/, комменты я тут проверяю редко, так что извиняюсь за поздний ответ)

      Удалить