Алгоритм пикселов OpenCV

каждый.

Я хотел бы знать, есть ли какое-либо улучшение алгоритма пикселизации, над которым я работаю.

Алгоритм написан на C ++ с использованием библиотеки OpenCV и работает следующим образом:

  • Немного увеличить контрастность коврика;
  • Изменить размер коврика, чтобы D% от его размера, используя Nearest-Neighbor яnterpolation;
  • Измените размер коврика до его исходного размера, также используя NNI;
[D = плотность, параметр функции]

Есть ли способ, чтобы результат выглядел лучше?

Mat pixelize(Mat src, int density){
Size s(src.cols, src.rows);

src.convertTo(src, -1, 1.1, 0);

resize(src, src, percent(s, density), 1, 1, INTER_NEAREST);
resize(src, src, s, 1, 1, INTER_NEAREST);

resize(src, src, Size(640, 480));
return src;
}

0

Решение

2 года и 9 месяцев спустя, но я думаю, что стоит поделиться тем, что я использую для пикселизации изображений:

int size = 7;//only odd!
int max_step = (size - 1) / 2;
Mat m = imread("test.jpg");
for (int i = max_step; i < m.rows- max_step; i+=size) {
for (int j = max_step; j < m.cols- max_step; j+=size) {
Vec3b colour = m.at<Vec3b>(Point(j, i));
for (int k = -max_step; k <= max_step; k++) {
for (int l = -max_step; l <= max_step; l++) {
m.at<Vec3b>(Point(j - k, i - l)) = colour;
}
}
}
}
imshow("pixeled", m);
waitKey(0);

При этом вы перебираете каждое нечетное количество пикселей (переменная размера) и обводите его соседей тем же цветом, что и выбранный.

Обратите внимание, что это не обрабатывает края, но вы получите представление об этом алгоритме

Здесь я оставил некоторые изображений с параметрами 1 (нет), 7 (средний) и 21 (очень).
Для улучшения вы можете выбрать переменную «size», которая будет варьироваться в зависимости от абстрактного параметра и размера изображения … Что ж, надеюсь, это поможет, даже с опозданием почти на 3 года!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]