当前位置: 首页 > 编程笔记 >

OpenCV实现马赛克和毛玻璃滤镜效果

冯胤
2023-03-14
本文向大家介绍OpenCV实现马赛克和毛玻璃滤镜效果,包括了OpenCV实现马赛克和毛玻璃滤镜效果的使用技巧和注意事项,需要的朋友参考一下

本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码,供大家参考,具体内容如下

一、马赛克效果

马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。

以下OpenCV程序实现马赛克效果,通过鼠标左键在图像上划定马赛克的矩形框。

#include <core\core.hpp> 
#include <highgui\highgui.hpp> 
 
using namespace cv; 
 
Mat imageSourceCopy; //原始图像 
Mat imageSource; //原始图像拷贝 
int neightbourHood = 9; //马赛克上每个方框的像素大小 
 
RNG rng; 
int randomNum; //邻域内随机值 
 
Point ptL; //左键按下时坐标 
Point ptR; //右键按下时坐标 
 
//鼠标回掉函数 
void onMouse(int event, int x, int y, int flag, void *ustg); 
 
int main() 
{ 
  imageSourceCopy = imread("Test.jpg"); 
  imageSource = imageSourceCopy.clone(); 
  //imshow("马赛克", imageSourceCopy); 
  namedWindow("马赛克"); 
  setMouseCallback("马赛克", onMouse); 
  waitKey(); 
} 
 
void onMouse(int event, int x, int y, int flag, void *ustg) 
{ 
  if (event == CV_EVENT_LBUTTONDOWN) 
  { 
    ptL = Point(x, y); 
  } 
  if (event == CV_EVENT_LBUTTONUP) 
  { 
    //对鼠标画出的矩形框超出图像范围做处理,否则会越界崩溃 
    x > imageSource.cols - 2 * neightbourHood ? x = imageSource.cols - 2 * neightbourHood : x = x; 
    y > imageSource.rows - 2 * neightbourHood ? y = imageSource.rows - 2 * neightbourHood : y = y; 
 
    //对鼠标从右下往右上画矩形框的情况做处理 
    ptR = Point(x, y); 
    Point pt = ptR; 
    ptR.x < ptL.x ? ptR = ptL, ptL = pt : ptR = ptR; 
    for (int i = 0; i < ptR.y - ptL.y; i += neightbourHood) 
    { 
      for (int j = 0; j < ptR.x - ptL.x; j += neightbourHood) 
      { 
        randomNum = rng.uniform(-neightbourHood / 2, neightbourHood / 2); 
        Rect rect = Rect(j + neightbourHood + ptL.x, i + neightbourHood + ptL.y, neightbourHood, neightbourHood); 
        Mat roi = imageSourceCopy(rect); 
        Scalar sca = Scalar( 
          imageSource.at<Vec3b>(i + randomNum + ptL.y, j + randomNum + ptL.x)[0], 
          imageSource.at<Vec3b>(i + randomNum + ptL.y, j + randomNum + ptL.x)[1], 
          imageSource.at<Vec3b>(i + randomNum + ptL.y, j + randomNum + ptL.x)[2]); 
        Mat roiCopy = Mat(rect.size(), CV_8UC3, sca); 
        roiCopy.copyTo(roi); 
      } 
    } 
  } 
  imshow("马赛克", imageSourceCopy); 
  waitKey(); 
} 

可以通过改变程序中neightbourHood参数的大小调整小矩形快的大小,实现效果:

二、毛玻璃效果

毛玻璃效果的实现通过用像素点邻域内随机一个像素点的颜色替代当前像素点的颜色实现。

#include <core\core.hpp> 
#include <highgui\highgui.hpp> 
 
using namespace cv; 
 
int main() 
{ 
  Mat imageSource = imread("Test.jpg"); 
  Mat imageResult = imageSource.clone(); 
  RNG rng; 
  int randomNum; 
  int Number = 5; 
 
  for (int i = 0; i < imageSource.rows - Number; i++) 
    for (int j = 0; j < imageSource.cols - Number; j++) 
    { 
      randomNum = rng.uniform(0, Number); 
      imageResult.at<Vec3b>(i, j)[0] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[0]; 
      imageResult.at<Vec3b>(i, j)[1] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[1]; 
      imageResult.at<Vec3b>(i, j)[2] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[2]; 
    } 
  imshow("毛玻璃效果", imageResult); 
  waitKey(); 
} 

实现效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。 

 类似资料:
  • 本文向大家介绍Python实现PS滤镜中马赛克效果示例,包括了Python实现PS滤镜中马赛克效果示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现PS滤镜中马赛克效果。分享给大家供大家参考,具体如下: 这里利用 Python 实现PS 滤镜中的马赛克效果,具体的算法原理和效果可以参考附录说明,Python示例代码如下: 附:PS 滤镜算法原理 ——马赛克 原图 效果图

  • 本文向大家介绍iOS自定义collectionView实现毛玻璃效果,包括了iOS自定义collectionView实现毛玻璃效果的使用技巧和注意事项,需要的朋友参考一下 先来看看效果图,由于录屏软件不给力,毛玻璃效果不明显,请见谅。 步骤详解: 说下思路,很简单,首先自定义一个collectionView, 重写它的initWithFrame:collectionViewLayout:方法,在这

  • 本文向大家介绍Android实现毛玻璃效果的对话框,包括了Android实现毛玻璃效果的对话框的使用技巧和注意事项,需要的朋友参考一下 一个popwindow,在弹出的时候背景是原界面的截图加高斯模糊效果: 先给出popwindow的布局文件 里面那个自定义imageView控件在我上一篇博客里,下面是activity的布局 用于圆角的背景xml,放在drawable文件夹中 activity的源

  • 本文向大家介绍Android中实现毛玻璃效果的3种方法,包括了Android中实现毛玻璃效果的3种方法的使用技巧和注意事项,需要的朋友参考一下 最近在做一款叫叽叽的App(男银懂的),其中有一个功能需要对图片处理实现毛玻璃的特效 进过一番预研,找到了3中实现方案,其中各有优缺点: 1、如果系统的api在16以上,可以使用系统提供的方法直接处理图片 2、 如果Api条件不满足,可以使用如下方法 3、

  • 本文向大家介绍Android毛玻璃背景效果简单实现代码,包括了Android毛玻璃背景效果简单实现代码的使用技巧和注意事项,需要的朋友参考一下 思路:      1.使用findViewByid获得需要设置毛玻璃的控件。      2.调用 setBlurBackground(Bitmap bmp)方法(下面会给出),参数为Bitmap类型,给控件设置毛玻璃背景!      3.已完成, 方法:

  • 本文向大家介绍Android模糊处理实现图片毛玻璃效果,包括了Android模糊处理实现图片毛玻璃效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲解了Android 虚化图片、模糊图片、图片毛玻璃效果的实现方法,具体内容如下 效果如图: 在Android可以用RenderScript方便的实现这个方法: 但是RenderScript的这个方法需要Android API17,也就说需要在An