PhotoShop算法实现高级篇--马赛克(三十八)
曾经看到一句话:阻止人类进步的最大障碍——马赛克。马赛克的发明者一定也想不到该技术对社会产生了如此重大的影响,也一定不曾想到会被调侃成阻止人类进步的最大障碍(对于岛国的******情有独钟,就另论~?~)。
其实马赛克的实现技术很简单,就是让图像中的所有像素成块状,而每个块的颜色则取决于块内像素的平均值或块内像素的随机值。 算法实现很简单(用当前像素来代替块内像素):
// 马赛克
void PhotoShop::Masic(Mat& img, Mat& dst, int nSize)
{
if ( dst.empty())
dst.create(img.rows, img.cols, img.type());
int offset = (nSize-1)/2;
int height = img.rows;
int width = img.cols;
for ( int row = offset; row <height - offset; row= row+2*offset)
{
for( int col= offset; col<width - offset; col = col+2*offset)
{
int val0 = getPixel(img, row, col, 0);
int val1 = getPixel(img, row, col, 1);
int val2 = getPixel(img, row, col, 2);
for ( int m= -offset; m<offset; m++)
{
for ( int n=-offset; n<offset; n++)
{
setPixel(dst, row+m, col+n, 0, val0);
setPixel(dst, row+m, col+n, 1, val1);
setPixel(dst, row+m, col+n, 2, val2);
}
} // for m
} // for col
} // for row
}
第一张块较小:
再来一张块大的:
再来一张阻止人类进步的:
作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。