哈哈镜效果滤镜

所谓哈哈镜,是一种表面凸凹不平的镜子,可以反应出人像及物件的扭曲面貌 。
哈哈镜效果滤镜实际上是通过图像形变来模拟真实的哈哈镜效果。所谓形变是一系列的坐标变换,变换方法不同,呈现的效果也不同。本文将介绍如何通过三角变换公式来实现这个滤镜特效,具体算法过程如下:

1,对于哈哈镜效果变换,首先它有两个参数,原点坐标和特效影响因子。

对于图像中的像素点P(x,y),假设原点坐标为X,Y,那么,根据三角函数变换可以得到:

当前像素P的相对坐标cX,cY:

3,由2中得到的新坐标就是像素P(x,y)的映射坐标,图像变换后的像素值就是映射坐标处的像素值。

4,对于半径影响因子k,这里程序中设置为定值100,具体范围自己控制。

以上就是哈哈镜的算法过程,同时我们放上核心代码如下:

//

///

/// Sunset Filter

///

/// Source image.

/// The X position of sun.

/// The Y position of sun.

/// The radius of sun light.

/// The result image.

private Bitmap ConvexFilterProcess(Bitmap srcBitmap, int cenX, int cenY, int radius)

{

Bitmap a = new Bitmap(srcBitmap);

int w = a.Width;

int h = a.Height;

double distance = 0.0;

double dis = 0.0;

if (radius > cenX || radius > cenY)

{

radius = Math.Min(cenX, cenY);

}

Bitmap dst = new Bitmap(w, h);

System.Drawing.Imaging.BitmapData srcData = a.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

System.Drawing.Imaging.BitmapData dstData = dst.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

unsafe

{

byte* pIn = (byte*)srcData.Scan0.ToPointer();

byte* pOut = (byte*)dstData.Scan0.ToPointer();

byte* p = (byte*)srcData.Scan0.ToPointer();

int sWidth = srcData.Stride;

int stride = sWidth - w * 3;

int R, G, B;

int newX = 0, newY = 0;

for (int y = 0; y < h; y++)

{

for (int x = 0; x < w; x++)

{

B = pIn[0];

G = pIn[1];

R = pIn[2];

distance = (x - cenX) * (x - cenX) + (y - cenY) * (y - cenY);

dis = Math.Sqrt(distance);

if (distance <= radius * radius && distance > 0)

{

newX = (int)(Math.Floor(dis * (double)(x - cenX) / (double)radius + (double)cenX)+0.5);

newY = (int)(Math.Floor(dis * (double)(y - cenY) / (double)radius + (double)cenY)+0.5);

pOut[0] = (byte)(*(p + newX * 3 + newY * srcData.Stride));

pOut[1] = (byte)(*(p + newX * 3 + 1 + newY * srcData.Stride));

pOut[2] = (byte)(*(p + newX * 3 + 2 + newY * srcData.Stride));

}

else

{

pOut[0] = (byte)B;

pOut[1] = (byte)G;

pOut[2] = (byte)R;

}

pIn += 3;

pOut += 3;

}

pIn += stride;

pOut += stride;

}

a.UnlockBits(srcData);

dst.UnlockBits(dstData);

}

return dst;

}

哈哈镜效果如下:

原图

哈哈镜效果图

程序demo: http://www.zealfilter.com/forum.php?mod=viewthread&tid=53&extra=page%3D2

图像特效---哈哈镜效果滤镜相关推荐

  1. C#Opencvsharp4实现几种图像特效

    环境配置:VS2019. Winform.Opencvsharp4 4.5.5.20211231 . .Net Framework 4.8 实验原图: 1.毛玻璃特效 . 原理: 用该像素点领域内的随 ...

  2. [Python图像处理] 二十五.图像特效处理之素描、怀旧、光照、流年以及滤镜特效

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  3. [Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. 用JavaScript实现的十个图像特效

    用JavaScript实现的十个图像特效 Reflex.js 此JavaScript,可以为你网页上的图像添加变形和反射的效果. 您可以调整反射,倾斜角度和边缘变形. 结果是这个样子. Curl.js ...

  5. 跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效

    摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现. 本文分享自华为云社区<[Python图像处理] 二十四.图像特效处理之毛玻璃.浮雕 ...

  6. 计算机视觉加强之图像特效与线段文字绘制

    一.图像特效介绍 1.灰度处理:彩色图片灰度化 对于彩色图片有三个颜色通道:RGB 对于灰度图片如果也是三个颜色通道,则RGB值是相等的 2.底板效果(灰度) 彩色底板是通过当前RGB取反得到的 3. ...

  7. UEFI开发探索32 – 有趣的图像特效

    (请保留-> 作者: 罗冰   https://blog.csdn.net/luobing4365) PhotoShop和ACD See中,有各种对图像进行特效处理的功能,我在大学的时候就很着迷 ...

  8. 图像特效及滤镜算法汇总

    OpenCV 版:OpenCV 图像处理 PS 图像处理算法汇总 图层混合算法: PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡) PS图层混合算法之二(线性加深,线性减淡,变亮,变暗) ...

  9. 百度智能云.图像特效:人像动漫化

    人像动漫化 目标 准备工作 操作流程 1.阅读官方文档 2.开始实现鉴权 3.人像动漫化实现 4.完整代码如下 5.还能这么玩? 目标 之前无意中看到有某位博主写过人像动漫化这样的文章,看着还挺好玩, ...

最新文章

  1. edit怎么读英语_名师说学习:英语学习有方法
  2. Complexer-YOLO:基于语义点云的实时三维目标检测与跟踪
  3. python使用imbalanced-learn的CondensedNearestNeighbour方法进行下采样处理数据不平衡问题
  4. 鸿合一体机触屏没反应怎么办_【干货】嵌入式工控一体机选择电容屏还是电阻屏?...
  5. 【知识星球】每日干货看图猜技术,你都会吗?
  6. Introduction | Elasticsearch权威指南(中文版) | 好的博文地址|官方资源所在位置
  7. CF464E The Classic Problem(主席树+哈希+最短路)
  8. iOS内存泄漏的常见情况
  9. [FFmpeg] Ubuntu 16.04 安装 FFmpeg
  10. go语言的安装、环境变量配置及简单使用
  11. c++ std::map find 用法
  12. JavaSE基础——Object类中的常用方法
  13. [转载]JXTA技术与原型实现简介
  14. 战战兢兢尝试tensorflow2.0
  15. 编译器的自举及实现过程
  16. 虾皮的发货模式是什么?怎么发货?
  17. CentOS7和CentOS8 FreeSWITCH 1.10.7 简单图形化界面1--安装脚本
  18. python实现手机连续点击
  19. OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
  20. 爱情三十九课,爱的礼物

热门文章

  1. Linux进程管理工具_Supervisor的安装与配置
  2. 求质数个数(求素数个数
  3. java语句翻译_java基础语句翻译
  4. session 生命周期,cookie详解
  5. mmdetection3d SUN RGB-D数据集预处理
  6. linux 可视化分区,可视化linux块设备的工具(分区,LVM PV,LV,mdadm设备……)
  7. iptables之state模块使用
  8. 广域网(WAN)简介
  9. 设计一款理财产品并发布推广
  10. 关于笔试遇到的题 1