【问题标题】:OpenCV pixelate algorithmOpenCV 像素化算法
【发布时间】:2016-01-09 10:18:03
【问题描述】:

每个人。

我想知道我正在研究的像素化算法是否有任何改进。

它是使用 OpenCV 库用 C++ 编写的算法,工作原理如下:

  • 稍微增加Mat的对比度;
  • 使用 nearest-neighbor i插值将 Mat 的大小调整为其大小的 D%;
  • 同样使用 nni;
  • 将 Mat 调整回原来的大小

[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;
}

【问题讨论】:

  • 你应该澄清看起来更好是什么意思,或者这个问题只是基于意见
  • 是的。最好在应用算法后提供源图像和图像,然后指出您不喜欢它的地方。
  • 这张图片:rd1.ig.com.br/wp-content/uploads/2015/05/… 对于我尝试的任何参数,结果都不是那么好,我想要的是像素艺术图像,但结果看起来不像......跨度>
  • 我正在研究 openCV 人脸检测,在检测到我想要像素化的人脸后。那么你知道我如何实现这个@DoCoO
  • 你可以使用上面描述的算法@ManuGupta

标签: c++ opencv pixelate


【解决方案1】:

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);

这样你就可以遍历每一个奇数像素(大小可变),并用与所选像素相同的颜色环绕它的邻居。

请注意,这不处理边缘,但您了解此算法的想法

在这里,我留下了一些 images,参数为 1(无)、7(中等)和 21(非常)。 为了改进,您可以选择“大小”变量来改变抽象参数的功能和图像的大小......嗯,希望它有所帮助,即使晚了将近 3 年!

【讨论】:

猜你喜欢
  • 2013-10-07
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 2013-10-10
  • 2011-01-16
  • 2012-04-27
相关资源
最近更新 更多