OpenCV 像素化算法
OpenCV pixelate algorithm
everyone.
我想知道我正在研究的像素化算法是否有任何改进。
它是使用 OpenCV 库C++编写的算法,其工作原理如下:
- 稍微增加垫子的对比度;
- 将垫子的大小调整为其大小的 D%,使用 n最早的 eighborinterpolation;
- 将垫子的大小调整回其原始大小,也使用 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;
}
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(非常(的图像。为了改进,您可以选择"大小"变量来改变抽象参数的功能和图像的大小......好吧,希望它有所帮助,即使晚了将近 3 年!
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 在Qt-cpp中通过像素获取QString的子字符串
- 快速的数据结构或算法来找到图像堆栈中每个像素的平均值
- OpenCV 像素化算法