给图像马赛克处理的程序c语言,C#中的图像处理(附带生成马赛克范例)
很多图片处理的算法从原理上讲其实非常简单,难点往往在如何去写算法实现它,更加难的就是如何去优化实现的算法。
马赛克算法很简单,说白了就是把一张图片分割成若干个val * val像素的小区块(可能在边缘有零星的小块,但不影响整体算法),每个小区块的颜色都是相同的。为了方便起见,我们不妨让这个颜色就用该区域最左上角的那个点的颜色。当然还可以有其他方法,比如取区块中间点的颜色,或区块中随机点的颜色作代表等等。
下面的示意图就是取val=2的结果。
原图像素
ABCDEFG
HIJKLMN
OPQRSTU
VWXYZ01
2345678
马赛克处理后
AACCEEG
AACCEEG
OOQQSSU
OOQQSSU
2244668
public static Bitmap KiMosaic(Bitmap b, int val)
{
if (b.Equals(null))
{
return null;
}
int w = b.Width;
int h = b.Height;
int stdR, stdG, stdB;
stdR = 0;
stdG = 0;
stdB = 0;
BitmapData srcData = b.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
unsafe
{
byte* p = (byte*)srcData.Scan0.ToPointer();
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
if (y % val == 0)
{
if (x % val == 0)
{
stdR = p[2]; stdG = p[1]; stdB = p[0];
}
else
{
p[0] = (byte)stdB;
p[1] = (byte)stdG;
p[2] = (byte)stdR;
}
}
else
{
// 复制上一行
byte * pTemp = p - srcData.Stride;
p[0] = (byte)pTemp[0];
p[1] = (byte)pTemp[1];
p[2] = (byte)pTemp[2];
}
p += 3;
} // end of x
p += srcData.Stride - w * 3;
} // end of y
b.UnlockBits(srcData);
}
return b;
}
先上原图:
再上效果图
给图像马赛克处理的程序c语言,C#中的图像处理(附带生成马赛克范例)相关推荐
- python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...
原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...
- 给图像马赛克处理的程序c语言,C#对图片进行马赛克处理可控制模糊程度的实现代码...
具体代码如下所示: using System.Drawing; using System.Drawing.Imaging; using System.Web.Mvc; namespace MVC201 ...
- 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android 学习笔记 1. 先到该网站下载微软的Speech SDK5.1 让windows操作系统拥有中文语音 ...
- ds18b20程序c语言,单片机中使用DS18B20温度传感器C语言程序(参考6)
/******************************************/ // // DS18B20温度计C程序 // 2007.06.08 /******** ...
- android 存储私有文件,是否可以只在Android应用程序的私有目录中保存图像,而不是设备的内部或任何外部存储?...
我不想将我的Android应用程序图像存储在内部或外部设备存储中,这样它将对库可见. 现在,我正在外部设备存储中保存我的应用程序图像.但是我想把图像保存到应用程序的私有目录中.我怎样才能做到这一点? ...
- java实现马赛克,java如何用Processing生成马赛克风格的图像
java如何用Processing生成马赛克风格的图像 首先使用PImage来实例化对象,再通过loadImage赋值,两层for循环遍历图片上的像素点,每隔5个像素点,画一个直径为3的圆.颜色通过p ...
- 用EasyX图形库编写动态彩色万花尺程序(c语言)
用EasyX图形库编写动态彩色万花尺程序(c语言) 在EasyX看到别人写的万花尺程序,想起来小时候玩的,就动手改进增加了一些效果.参考程序连接(侵删):万花尺_慢羊羊 我的效果如下,输入数据:[30 ...
- java 验证码图片识别_JavaSE图像验证码简单识别程序详解
本文为大家分享了JavaSE图像验证码简单识别程序,供大家参考,具体内容如下 首先你应该对图片进行样本采集,然后将样本进行灰度处理,也就是变成黑白两色. 然后你就可以使用该类,对目标文件进行分析.具体 ...
- 编写一个程序,实现将c语言源程序中的注释全部删除
<程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 6.编写一个程序,实现将c语言源程序中的注释全部删除 #include<stdl ...
最新文章
- 用零知识证明解决投票安全
- 有限单元法基本原理和数值方法_SPH法介绍
- [Objective-C] Copy 和 MutableCopy
- Java简单知识梳理
- Python档案袋(列表、元组、字典、集合 )
- javaScript获取url中的参数
- 大学计算机上机实验指导与测试pdf,4大学计算机基础上机实验指导与习题--习题.pdf...
- 哈苏相机加持!一加9 Pro海外抢先发布:采用120Hz LTPO屏幕
- redis中集群的故障恢复
- sql基础语法(增、删、改、查)
- 彩云之南,难忘的地方
- 复现KDL:使用Msnhnet实现串联机器人运动数值逆解(一)
- ubuntu18.04中基于Docker搭建tensorflow-gpu开发环境
- 针对零基础的UE开发(05)
- EasyRecovery15MacPro离线便捷扫描恢复数据
- 【C++】类和对象---什么是类?
- 指数移动平均(EMA)的原理及PyTorch实现
- linux texlive 中文,[linux-004] texlive的安装以及用xetex和xelatex进行中文编辑
- DJI Flight Simulator 大疆飞行模拟器 安装教程
- 车牌识别笔记:从图像中定位并裁剪车牌照