当前位置: 首页 > ops >正文

学习OpenCV:滤镜系列(15)——羽化(模糊边缘)

【原文:http://blog.csdn.net/yangtrees/article/details/9210153】

在PHOTOSHOP里,羽化就是使你选定范围的图边缘达到朦胧的效果。 羽化值越大,朦胧范围越宽,羽化值越小,朦胧范围越窄。可根据你想留下图的大小来调节。
算法分析:
1、通过对rgb值增加额外的V值实现朦胧效果
2、通过控制V值的大小实现范围控制。
3、V  = 255 * 当前点Point距中点距离的平方s1 / (顶点距中点的距离平方 *mSize)s2;
4、s1 有根据 ratio 修正 dx dy值。

#include <math.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
#define MAXSIZE (32768)
using namespace cv;
using namespace std;float mSize = 0.5;int main()
{Mat src = imread("D:/img/arrow04.jpg",1);imshow("src",src);int width=src.cols;int heigh=src.rows;int centerX=width>>1;int centerY=heigh>>1;int maxV=centerX*centerX+centerY*centerY;int minV=(int)(maxV*(1-mSize));int diff= maxV -minV;float ratio = width >heigh ? (float)heigh/(float)width : (float)width/(float)heigh;Mat img;src.copyTo(img);Scalar avg=mean(src);Mat dst(img.size(),CV_8UC3);Mat mask1u[3];float tmp,r;for (int y=0;y<heigh;y++){uchar* imgP=img.ptr<uchar>(y);uchar* dstP=dst.ptr<uchar>(y);for (int x=0;x<width;x++){int b=imgP[3*x];int g=imgP[3*x+1];int r=imgP[3*x+2];float dx=centerX-x;float dy=centerY-y;if(width > heigh)dx= (dx*ratio);elsedy = (dy*ratio);int dstSq = dx*dx + dy*dy;float v = ((float) dstSq / diff)*255;r = (int)(r +v);g = (int)(g +v);b = (int)(b +v);r = (r>255 ? 255 : (r<0? 0 : r));g = (g>255 ? 255 : (g<0? 0 : g));b = (b>255 ? 255 : (b<0? 0 : b));dstP[3*x] = (uchar)b;dstP[3*x+1] = (uchar)g;dstP[3*x+2] = (uchar)r;}}imshow("羽化",dst);waitKey();imwrite("D:/img/羽化.jpg",dst);}

Reference:http://www.cnblogs.com/lipeil/archive/2012/09/21/2696519.html
更加简单的方式:
分析PS的羽化结果可以知道,羽化达成了两个目的:1. 平滑轮廓线 2. 扩宽过渡区域
1.平滑轮廓线:可以采用均值滤波和cvSnakeImage()两种方式,前者维护一个宽度为H的窗口,窗口内均值滤波;而后者是OpenCV的C语言版本函数C++没有包含,其原理是能量最小化,经过测试前者的速度略高于后者,且当H较大时,可以采用窗口加权减一加一的方式来代替每次都求H次加权的方式;
2.扩宽过度区域:采用对mask采用全图均值滤波方法即可,卷积核的半径越大,过渡区域越宽。

http://www.xdnf.cn/news/11746.html

相关文章:

  • 服务硬件及RAID配置
  • flowchart流程图编程语言下载_C语言流程图生成工具(AutoFlowchart)
  • 【Python爬虫与数据分析】爬虫代理IP与访问控制
  • 完整版搭建hadoop集群
  • 有关嵌入式、单片机、51单片机、STM32、的一些概念详解
  • 解决系统缺少找不到zipfldr.dll文件的问题
  • 酷盘 文件服务器,酷盘是什么 酷盘怎么使用【使用方法】
  • 五款免费pdf转换成word软件
  • python交易是什么意思_py交易什么梗?起源及流行原因
  • HTML简洁大气带进度条的URL跳转页面源码
  • 应用开放平台 (Open Platform)
  • dedecms织梦去除版权powered by dedecms方法
  • 解决NVIDIA软件或驱动安装包出错
  • 安卓手机启动广告让人心烦?学会这招自动跳过APP广告
  • 三分钟了解TMS系统和WMS仓库管理软件,教你玩转供应链
  • c#winform使用WebBrowser 大全
  • Windows 8 32位简体中文 消费者预览版(Consumer Preview) 安装体验全过程
  • MBR、主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区讲解
  • 科普:生成式 AI 简介
  • 汉字编码问题
  • C++面向对象(一):面向对象程序设计概述
  • IntelliJ IDEA 20162017注册方法和注册码
  • 大公司如何做 APP:背后的开发流程和技术
  • ui自动化测试
  • 网络爬虫——Jsoup解析HTML
  • 手把手教你安装VMware Workstation虚拟机
  • CSS3——transition过渡效果
  • endnote国内杂志文献格式_【科研工具42】Endnote 软件使用教程
  • 网络爬虫是什么
  • SD卡分区及取消分区