Примените перспективу изображения через пакетный режим в калеке

Хотите верьте, хотите нет, можно сделать это с find и du. Я использовал подобную технику, что я описал на своем блоге некоторое время движение. Та статья названа: [острота]: Вычисление Использования дискового пространства для Списка Файлов Используя du в соответствии с Linux.

Суть того сообщения является командой, такой как это:

$ find -maxdepth 2 -type f | tr '\n' '\0' | du -ch --files0-from=-

Пример

Это перечислит размер всех файлов наряду с общим итогом.

$ find -maxdepth 2 -type f | tr '\n' '\0' | du -ch --files0-from=- | tail -10
0   ./92086/2.txt
0   ./92086/5.txt
0   ./92086/14.txt
0   ./92086/19.txt
0   ./92086/18.txt
0   ./92086/17.txt
4.0K    ./load.bash
4.0K    ./100855/plain.txt
4.0K    ./100855/tst_ccmds.bash
21M total

Примечание: Это решение требует этого du поддерживайте --files0-from= переключатель, который является переключателем GNU к моему знанию.

выборка из du страницы справочника

--files0-from=F
          summarize disk usage of the NUL-terminated file names specified in 
          file F; If F is - then read names from standard input

Также этот метод страдает от неспособности иметь дело со специальными символами в именах файлов, таких как пробелы и нераспечатки.

Примеры

du: cannot access `./101415/fileD': No such file or directory
du: cannot access `E': No such file or directory

С ними можно было иметь дело путем представления больше tr .. .. команды для замены ими с альтернативными символами. Однако существует лучший путь, если у Вас есть доступ к GNU find.

Улучшения

Если Ваша версия find предложения --print0 переключитесь затем, можно использовать это колдовство, которое имеет дело с файлами, которые имеют пробелы и/или специальные символы, которые не являются печатаемыми.

$ find -maxdepth 2 -type f -print0 | du -ch --files0-from=- | tail -10
0   ./92086/2.txt
0   ./92086/5.txt
0   ./92086/14.txt
0   ./92086/19.txt
0   ./92086/18.txt
0   ./92086/17.txt
4.0K    ./load.bash
4.0K    ./100855/plain.txt
4.0K    ./100855/tst_ccmds.bash
21M total

3
23.05.2017, 15:39
1 ответ

Вероятно, лучшим инструментом для работы с изображениями будет ImageMagick. Если вы посмотрите документацию, там есть обширные примеры, показывающие, как использовать функцию -distort , которую, как мне кажется, вы ищете.

Пример

До ss #1 После enter image description here

Командная строка для выполнения преобразования:

$ convert checks.png -filter point           
    -virtual-pixel tile -mattecolor DodgerBlue
    -distort Perspective '0,0 20,60  90,0 70,63  0,90 5,83  90,90 85,88'
    horizon_tile_point.png

Есть 2 другие методы выполнения выборки, чтобы изображение выглядело лучше. В частности, "суперсэмплинг сетки" и "повторная выборка эллиптической взвешенной области (EWA)". Последний вариант используется по умолчанию.

Как мне вычислить координаты?

Есть 2 ресурса для понимания того, как сгенерировать серию координат для преобразовать . Первый - это тот, который я дал выше. Второй - это SO Q&A под названием: Понимание искажения перспективной проекции ImageMagick , в частности, @ KurtPfeifle, ответ .

Координаты следующие:

Sx1,Sy1 Dx1,Dy1   Sx2,Sy2 Dx2,Dy2   Sx3,Sy3 Dx3,Dy3   ...   Sxn,Syn Dxn,Dyn  
  • x используется для представления координаты X.
  • y используется для представления координаты Y.
  • 1, 2, 3, ... n используются для представления 1-го, 2-го, 3-го, ... n-го пикселя.
  • S используется здесь для исходного пикселя.
  • D используется здесь для целевого пикселя.

Ссылки

2
27.01.2020, 21:28

Теги

Похожие вопросы