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滤镜中马赛克效果示例
(0)

相关推荐

  • Python实现PS滤镜的旋转模糊功能示例

    本文实例讲述了Python实现PS滤镜的旋转模糊功能.分享给大家供大家参考,具体如下: 这里用 Python 实现 PS 滤镜中的旋转模糊,具体的算法原理和效果可以参考附录相关介绍.Python代码如下: from skimage import img_as_float import matplotlib.pyplot as plt from skimage import io import numpy as np import numpy.matlib file_name='D:/Visual

  • Python实现PS滤镜中马赛克效果示例

    本文实例讲述了Python实现PS滤镜中马赛克效果.分享给大家供大家参考,具体如下: 这里利用 Python 实现PS 滤镜中的马赛克效果,具体的算法原理和效果可以参考附录说明,Python示例代码如下: from skimage import img_as_float import matplotlib.pyplot as plt from skimage import io import random import numpy as np file_name='D:/Visual Effec

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

    本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码,供大家参考,具体内容如下 一.马赛克效果 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓. 以下OpenCV程序实现马赛克效果,通过鼠标左键在图像上划定马赛克的矩形框. #include <core\core.hpp> #include <highgui\highgui.hpp> using namespace cv; Mat i

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

    本文实例为大家分享了OpenCV实现马赛克和毛玻璃滤镜特效的具体代码,供大家参考,具体内容如下 一.马赛克效果 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓. 以下OpenCV程序实现马赛克效果,通过鼠标左键在图像上划定马赛克的矩形框. 代码: #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #

  • OpenCV实现马赛克功能

    本文实例为大家分享了OpenCV实现马赛克功能的具体代码,供大家参考,具体内容如下 实现用按下鼠标左键拖动时,在鼠标经过的路径上打上马赛克. 马赛克的原理是将图像中选中区域的像素用这个选中区域中的某一像素覆盖. 为了不让鼠标重复经过图像中同一个的时候,选取不一样的像素,该程序将在输入图片的时候,就实现了全图的马赛克效果.而当鼠标划过的时候,程序只是将实现马赛克的图片的指定位置复制到显示的图像中. 效果类似于QQ截图中的马赛克. #include <opencv2\core\core.hpp>

  • Opencv 马赛克和毛玻璃效果与图片融合的实现

    1.马赛克效果 马赛克的基本原理就是,用某一个区域的某一个像素点替代这个区域所有的像素点,从而导致图片出现模糊的效果,如下: import cv2 # 马赛克效果 img = cv2.imread(filename='../anqila21.jpg',flags=1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] flag = 2 # 系数,系数越小,马赛克的效果越不明显 for m in range(26,height):

  • python使用opencv实现马赛克效果示例

    本文实例讲述了python使用opencv实现马赛克效果.分享给大家供大家参考,具体如下: 最近要实现opencv视频打马赛克,在网上找了一下基本是C++的实现,好在原理一样,下面给出python实现. 原理和注意点,我都写在注释里了 import cv2 ##马赛克 def do_mosaic(frame, x, y, w, h, neighbor=9): """ 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内左上像素点的颜色代替,这样可以模糊细节,但是

  • Python Opencv实现最强美颜滤镜效果

    目录 前言 环境安装 效果展示 第一组随机 第二组随机 源码展示 额外的小知识补充: 加载图片: 图片模糊处理: 总结 前言 继老干妈.辣条之后,中国美颜软件在海外一夜成名,把所有人都幻化成了粉红小甜心. 人类学者克里斯特尔·阿比丁博士认为,这是一种亚洲风情的文化扩散. 哈喽!哈喽,我是木子! “亚洲四大邪术”之一的中国美颜术绝非浪得虚名—— 根据小编的第八定律,99% 的人拍了照在发朋友圈之前,都会给自己P一P. 并且都信奉着一个真理:美颜过后的自己,才是真正的自己.​ 最初,大家修改的范围也

  • 超详细注释之OpenCV实现视频实时人脸模糊和人脸马赛克

    目录 1. 效果图 2. 原理 2.1 什么是人脸模糊,如何将其用于人脸匿名化? 2.2 执行人脸模糊/匿名化的步骤 3. 源码 3.1 图像人脸模糊源码 3.2 实时视频流人脸模糊源码 参考 这篇博客将介绍人脸检测,然后使用Python,OpenCV模糊它们来"匿名化"每张图像,以确保隐私得到保护,保证没有人脸可以被识别如何使用. 并介绍俩种模糊的方法:简单高斯模糊.像素模糊. 人脸模糊和匿名化的实际应用包括: 公共/私人区域的隐私和身份保护 在线保护儿童(即在上传的照片中模糊未成年

  • Python+OpenCV实现六种常用图像特效

    目录 图像融合 灰度处理 颜色反转 灰度反转 彩色反转 马赛克效果 毛玻璃效果 浮雕效果 图像融合 按照一定的比例将两张图片融合在一起 addWeighted()方法: 参数1第一张图片矩阵 参数2第一张图片矩阵的权重 参数3第二张图片矩阵 参数4第二张图片矩阵的权重 融合之后的偏移量 进行叠加的两张图片宽高应该相同 叠加之后的像素偏移值如果填的话不要填太大,超过255会导致图像偏白 import cv2 import cv2 as cv img = cv.imread("img/lena.jp

  • Python OpenCV实现3种滤镜效果实例

    目录 前言 浮雕滤镜效果 雕刻滤镜效果 凸透镜滤镜效果 总结 前言 本篇文章要使用OpenCV.Numpy 和Math这3个工具包实现一个简单的滤镜编辑器.在这个滤镜编辑器中,包含了3种滤镜效果,它们分别是浮雕滤镜.雕刻滤镜和凸透镜滤镜.本篇文章将对目标图像(如图1所示)进行处理,使得目标图像分别呈现浮雕滤镜(如图2所示).雕刻滤镜(如图3所示)和凸透镜滤镜(如图4所示)的视觉效果. 浮雕滤镜效果 为了实现浮雕滤镜效果,首先要把实现浮雕滤镜效果的原理搞清楚.弄明白.实现浮雕滤镜效果的原理如下所示

随机推荐