LINUX.ORG.RU

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

 ,


0

1

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

Кто-нибудь знает, как это сделать с помощью ImageMagick или какой-нибудь другой консольной (чтобы натравить ее на несколько файлов) утилиты?


Ок, всем ответившим спасибо!

Kzer-Za
() автор топика
Ответ на: комментарий от peregrine

Pillow больно уж тормозной…

Обработка изображений весьма легко делается на Rust, вот пример. Берём по координатам пиксели из одного буфера, по ним вычисляем пиксель для нового буфера.

Впрочем, вполне возможно, что задачу и на Imagemagick можно решить… матрицы конволюции он точно умеет, но конволюция здесь не подходит, условие нелинейное.

mertvoprog
()
Ответ на: комментарий от mertvoprog

Rust немного сложнее Python-а. Для программиста нормально, а для пользователя нет. Я вон пока только въезжаю в раст.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Зато компилятор упорно бьёт по рукам, пока не довести код до рабочего состояния. И сообщения об ошибках очень информативные. А питон в лучшем случае выдаст какой-то непонятный эксепшон.

mertvoprog
()

Если речь о единичных пикселах, стоящих либо по диагонали относительно друг друга, либо через один, то это легко поправить свёртками. Легко для человека, не для компьютера :) 18 строк:

#!/usr/bin/python
import sys, cv2, numpy as np

if len(sys.argv) < 5:
    print(f'Usage: {sys.argv[0]} <input> <white threshold> <black threshold> <output>')
    exit(1)

input, th_w, th_b, output = sys.argv[1:5]
kernel = np.array([0, 1]*4 + [0]).reshape((3,3)) / 4

original = cv2.imread(input)

fitered = cv2.filter2D(original, -1, kernel)
gray = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY)
mask = np.logical_or(gray > int(th_w), gray < int(th_b))
result = np.where(mask[:,:,None], fitered, original)

cv2.imwrite(output, result)

Пример запуска:

./remove_flies.py input.png 250 78 output.png

Зависимости: Python 3.6+, NumPy, OpenCV.

anonymous
()
Ответ на: комментарий от peregrine

Было бы желание себе яму выкопать…

Это нельзя запретить нигде и никак!

mertvoprog
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.