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

一、马赛克效果

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

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

#include

#include

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(i + randomNum + ptL.y, j + randomNum + ptL.x)[0],

imageSource.at(i + randomNum + ptL.y, j + randomNum + ptL.x)[1],

imageSource.at(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

#include

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(i, j)[0] = imageSource.at(i + randomNum, j + randomNum)[0];

imageResult.at(i, j)[1] = imageSource.at(i + randomNum, j + randomNum)[1];

imageResult.at(i, j)[2] = imageSource.at(i + randomNum, j + randomNum)[2];

}

imshow("毛玻璃效果", imageResult);

waitKey();

}

实现效果:

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

opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果相关推荐

  1. OpenCV总结:实现马赛克和毛玻璃滤镜效果

    一.马赛克效果 马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓. 先来张倪美人的镇楼照: 以下OpenCV程 ...

  2. opencv 去除玻璃蒙版_OpenCV实现马赛克和毛玻璃滤镜效果

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

  3. linux程序给图片打马赛克,iOS集成OpenCV,并实现图片马赛克

    关于Open CV OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由一系列 C 函 ...

  4. 【opencv】1.opencv安装、编译、运行等踩坑记录

    1.安装python2环境下opencv2.4.9安装不成功的解决方法 2.查看linux下的各种安装库的安装位置和版本,以opencv为例 3.cmake与g++: opencv之在Linux下编译 ...

  5. 解决OpenCV问题:OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale,

    解决OpenCV问题:OpenCV Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, 目录 ...

  6. OpenCV内置OpenCV的实例(附完整代码)

    OpenCV内置OpenCV的实例 OpenCV内置OpenCV的实例 OpenCV内置OpenCV的实例 #include "opencv2/core.hpp" #include ...

  7. opencv学习(part1)--OpenCv框架介绍

    学习笔记,仅供参考,有错必究 文章目录 opencv学习 OpenCv框架介绍 二值图像分析 二值图像定义与说明 图像二值化介绍 常见的二分类分割方法 opencv学习 OpenCv框架介绍 Open ...

  8. 【OpenCV实战】OpenCV实现人脸检测详解(含代码)

    OpenCV中有许多可以进行人脸.人眼检测的特征文件,今天我们利用OpenCV中自带的特征文件haarcascade_frontalface_default.xml来进行人脸检测. [OpenCV实战 ...

  9. OpenCV简介、OpenCV的发展历程

    OpenCV简介.OpenCV的发展历程 近年来,人工智能是伴随着科技发展出现的一个重要词汇,全球多个国家提出了发展人工智能的规划方案.我国也在大力发展人工智能,众多高校也纷纷成立了关于人工智能的学院 ...

最新文章

  1. DCMTK:DcmElement :: calcElementLength的测试程序
  2. VTK:IO之ReadImageData
  3. re 模块 分组特别说明
  4. js删除mysql记录_(DELETEUPDATE)修改、删除数据记录_MySQL
  5. mysql 获取结果_【原创】7. MYSQL++中的查询结果获取(各种Result类型)
  6. day-17 包与模块
  7. Lua程序设计--全局变量
  8. SQL Server-聚焦LEFT JOIN...IS NULL AND NOT EXISTS性能分析(十七)
  9. Keepalived+LVS
  10. 探索数据可视化,业务数据是核心
  11. java中clone方法_Java Object clone()方法– Java中的克隆
  12. xss绕过尖括号和双括号_【Web安全入门】三个技巧教你玩转XSS漏洞
  13. Java基础(七) 房屋出租系统
  14. mysql单表多次内联接查询学科名称,一级学科名称二级学科名称三级学科名称
  15. python请输入一个三位数输出该三位数的逆序数_键盘输入一个三位数,输出逆序后的数...
  16. Spring动态代理的两种方式
  17. 了解KK音标以及相似音标如何学习记忆
  18. T-test检验中的P,α理解
  19. 2020安洵杯--MISC
  20. arm+银河麒麟v10安装nginx1.18

热门文章

  1. linux中线程的挂起与恢复(进程暂停)
  2. gentoo 安装时的网络配置
  3. mysqlworkbench导入sql文件_将sql脚本文件导入数据库
  4. arcgis创建剖面线execl文件
  5. 【转】PF_RING开发指南
  6. 【转】云社区 博客 博客详情 二维异形件排版算法介绍(一)
  7. 【转】ABP源码分析十四:Entity的设计
  8. 【转】使用IIS做HTTP和WebSocket服务的反向代理
  9. MVC和WebForm区别
  10. 一步步编写操作系统 42 用c语言编写内核