一、通过用像素点邻域内随机一个像素点的颜色替代当前像素点的颜色实现
实现代码:
cv::Mat frostedGlass(const cv::Mat& img, int n)
{
cv::Mat destImg(img.size(), img.type());
cv::RNG rng;
int randomNum;
for (int i = 0; i < destImg.rows; i++)
{
for (int j = 0; j < destImg.cols; j++)
{
randomNum = rng.uniform(0, n);
int row = i + randomNum > destImg.rows ? destImg.rows - randomNum : i + randomNum;
int col = j + randomNum > destImg.cols ? destImg.cols - randomNum : j + randomNum;
destImg.at<cv::Vec3b>(i, j)[0] = img.at<cv::Vec3b>(row, col)[0];
destImg.at<cv::Vec3b>(i, j)[1] = img.at<cv::Vec3b>(row, col)[1];
destImg.at<cv::Vec3b>(i, j)[2] = img.at<cv::Vec3b>(row, col)[2];
}
}
return destImg;
}
效果:
二、通过高斯模糊后,与原图对比生成噪音点叠加实现
三、使用boxFilter将噪音点拉长,从而产生横纹或竖纹效果
四、将高斯模糊后的图像减去噪音点图像,然后对应原图的相应图像相见,参数叠加效果
五、直接用高斯模糊叠加噪音点实现
六、将图像打乱,然后随机抽取部分点,替换到高斯模糊后的图像中