【OpenCV】motion blur 的简单实现
2024-09-08 09:18:26
先推荐界面比较丑,但是还不错的在线图片处理网站:
http://www168.lunapic.com/editor/
由于最近在做毕设了,结合前面关于图像处理和机器学习的操作,想做一些好玩的东西,其中有一部分需要构建一个模糊人脸库。一想到人脸照,大概都是超清晰的自拍(selfie)或者证件照,所以自然模糊的人脸好难找。。。
所以自己仿真。。做了一个小小的test set。。。
参杂了高斯模糊、失焦模糊、和运动模糊。。
opencv没有motion blur的filter
为了方便批量处理,写了一个小小小小的函数。。
cv::Mat MotionBlur(cv::Mat srcImg, int filterSize) {
int size = filterSize;
cv::Mat filter = cv::Mat::zeros(size, size, CV_8UC1);
cv::Mat result = cv::Mat(srcImg.size(), srcImg.type());
for (int i = ; i < size; i++)filter.at<uchar>(i, i) = (uchar);
for (int i = ; i < filter.rows; i++) {
for (int j = ; j < filter.cols; j++) {
cout << (int)filter.at<uchar>(i, j) << " ";
}
cout << endl;
} int len = size / ; for (int r = ; r < srcImg.rows; r++) {
for (int c = ; c < srcImg.cols; c++) {
//mask
int red = , green = , blue = ;
for (int i = r - len; i <= r + len; i++) {
for (int j = c - len; j <= c + len; j++) {
if (i < || j < || i >= srcImg.rows || j >= srcImg.cols) continue;
blue += ((int)srcImg.at<cv::Vec3b>(i, j)[]) * ((int)filter.at<uchar>(i - (r - len), j - (c - len)));
green += ((int)srcImg.at<cv::Vec3b>(i, j)[]) * ((int)filter.at<uchar>(i - (r - len), j - (c - len)));
red += ((int)srcImg.at<cv::Vec3b>(i, j)[]) * ((int)filter.at<uchar>(i - (r - len), j - (c - len)));
}
} result.at<cv::Vec3b>(r, c)[] = (uchar)(blue / size);
result.at<cv::Vec3b>(r, c)[] = (uchar)(green / size);
result.at<cv::Vec3b>(r, c)[] = (uchar)(red / size);
}
} cv::imshow("motion blur", result);
cv::waitKey(); return result;
}
e.g.
filterSize = 9时, 角度45,矩阵如下
1 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 1
卷积过后还要归一化, 即 * 1/9
最新文章
- iOS开发系列--并行开发其实很容易
- JS弹出遮罩层
- jdk1.6安装
- 和为S的两个数VS和为S的连续正数序列
- centos7 docker1.12 私有仓库
- PDF.NET框架操作——工具应用(一)
- .net core demo &; docker images
- C语言setjmp函数使用
- MDN >; Web technology for developers >; HTTP
- IOS 调用系统相册或照相机tab按钮显示中文
- 《Java从入门到精通》src9-25
- margin 塌陷现象 与 注意事项
- 转载 JDK + Android-SDK + Python + MonkeyRunner 的安装
- 易语言关于使用CURL,网页_访问,网页_访问S,网页_访问_对象,鱼刺(winHttpW)发送Get性能测试
- python开发基础之语法基础
- ABP框架(asp.net core 2.X+Vue)模板项目学习之路(二)--切换MySql数据库
- uva11827 处理下输入
- 手把手教你制作微信小程序,开源、免费、快速搞定
- VMWare 虚机迁移后Linux系统网卡启动问题
- linux iostat 性能指标说明(转)
热门文章
- 如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)
- HNOI2008 GT考试 (KMP + 矩阵乘法)
- Css之cursor 属性
- 收集几个Android CalendarView非常用属性
- zepto.js 总结
- UVa 11584 Partitioning by Palindromes (简单DP)
- 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时14&;&;15
- PHP empty()函数使用需要注意
- IT兄弟连 JavaWeb教程 使用Java同步机制对多线程同步
- 前端开发常用cmd命令