图像特效---哈哈镜效果滤镜
哈哈镜效果滤镜
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
图像特效---哈哈镜效果滤镜相关推荐
- C#Opencvsharp4实现几种图像特效
环境配置:VS2019. Winform.Opencvsharp4 4.5.5.20211231 . .Net Framework 4.8 实验原图: 1.毛玻璃特效 . 原理: 用该像素点领域内的随 ...
- [Python图像处理] 二十五.图像特效处理之素描、怀旧、光照、流年以及滤镜特效
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- [Python图像处理] 二十四.图像特效处理之毛玻璃、浮雕和油漆特效
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 用JavaScript实现的十个图像特效
用JavaScript实现的十个图像特效 Reflex.js 此JavaScript,可以为你网页上的图像添加变形和反射的效果. 您可以调整反射,倾斜角度和边缘变形. 结果是这个样子. Curl.js ...
- 跟我学Python图像处理丨图像特效处理:毛玻璃、浮雕和油漆特效
摘要:本文讲解常见的图像特效处理,从而让读者实现各种各样的图像特殊效果,并通过Python和OpenCV实现. 本文分享自华为云社区<[Python图像处理] 二十四.图像特效处理之毛玻璃.浮雕 ...
- 计算机视觉加强之图像特效与线段文字绘制
一.图像特效介绍 1.灰度处理:彩色图片灰度化 对于彩色图片有三个颜色通道:RGB 对于灰度图片如果也是三个颜色通道,则RGB值是相等的 2.底板效果(灰度) 彩色底板是通过当前RGB取反得到的 3. ...
- UEFI开发探索32 – 有趣的图像特效
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) PhotoShop和ACD See中,有各种对图像进行特效处理的功能,我在大学的时候就很着迷 ...
- 图像特效及滤镜算法汇总
OpenCV 版:OpenCV 图像处理 PS 图像处理算法汇总 图层混合算法: PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡) PS图层混合算法之二(线性加深,线性减淡,变亮,变暗) ...
- 百度智能云.图像特效:人像动漫化
人像动漫化 目标 准备工作 操作流程 1.阅读官方文档 2.开始实现鉴权 3.人像动漫化实现 4.完整代码如下 5.还能这么玩? 目标 之前无意中看到有某位博主写过人像动漫化这样的文章,看着还挺好玩, ...
最新文章
- edit怎么读英语_名师说学习:英语学习有方法
- Complexer-YOLO:基于语义点云的实时三维目标检测与跟踪
- python使用imbalanced-learn的CondensedNearestNeighbour方法进行下采样处理数据不平衡问题
- 鸿合一体机触屏没反应怎么办_【干货】嵌入式工控一体机选择电容屏还是电阻屏?...
- 【知识星球】每日干货看图猜技术,你都会吗?
- Introduction | Elasticsearch权威指南(中文版) | 好的博文地址|官方资源所在位置
- CF464E The Classic Problem(主席树+哈希+最短路)
- iOS内存泄漏的常见情况
- [FFmpeg] Ubuntu 16.04 安装 FFmpeg
- go语言的安装、环境变量配置及简单使用
- c++ std::map find 用法
- JavaSE基础——Object类中的常用方法
- [转载]JXTA技术与原型实现简介
- 战战兢兢尝试tensorflow2.0
- 编译器的自举及实现过程
- 虾皮的发货模式是什么?怎么发货?
- CentOS7和CentOS8 FreeSWITCH 1.10.7 简单图形化界面1--安装脚本
- python实现手机连续点击
- OpenKE 的使用(四)— HolE 和 ComplEx 论文复现
- 爱情三十九课,爱的礼物