文章目录

  • 简单介绍
  • 正文
    • 灰度变换
    • 马赛克
    • 浮雕
    • 油画
    • 全局均衡化
  • EMMM

简单介绍

博主是某工大的学生,最近在做各科的课设,然后其中一个是C++图像处理的课程设计。做这种东西没啥技术含量,但是加上写报告又得浪费个一两天的时间。
为了节约各位大佬们的时间(为了打发无聊),我在这里简单总结一下之前查到的各种简单的图像处理特效实现方法,尽量帮到想要想要学习图像处理特效的大家。
在评论里我会贴上一个完整的实现链接。帮到下个学期想要直接用到这个的小伙伴们~老师还没出成绩,我担心老师对照网上突然发现我的代码查重率100%,所以出成绩后我再贴上地址蛤。

正文

首先,博主使用的是老师发下的CDIB类和VS的MFC框架来实现。上网查的时候发现不同人写的CDIB类区别还挺大的,所以我要先对这个类做一下介绍,方便只是想学方法的同学能够理解之后的部分核心代码的意思。
以下是CDIB类的头文件。其中:
ShowDIB使用是把对应的三维按照BGR的格式打印到屏幕上。
m_pDIBData是彩色图片信息(自带补零位)。
m_pDIBDumpData是原始图片的的信息(自带补零位)。
m_pdata是图片的灰度信息(无补零位)。
知道这些信息,然后再和你们自己设计的cdib类对应起来,就会方便很多。
tips:关于补零位,这是bmp格式文件的特色,为了加快运行速度而设计的,想要仔细了解的同学可以在该博客详细了解一下。

class CDIB :public CObject
{
public:int m_nImType;void close();void UpdateData();void InvalidateData();BYTE* m_pdata;BYTE* m_pR, * m_pG, * m_pB;void ShowDIB(CDC*, int, int, int, int, BYTE*, BITMAPINFO*);bool m_bLoaded;CDIB();virtual ~CDIB();BITMAPINFO* m_pBMI;               //BITMAPINFO pointerBYTE* m_pDIBData;                 //DIB data pointerBYTE* m_pDumpDIBData;BITMAPFILEHEADER bfh;BITMAPINFOHEADER bih;CPalette* m_pPalette;DWORD dataBytes;bool SaveFile(LPCTSTR lpszFileName);virtual bool LoadFromFile(LPCTSTR lpszFileName);int GetDIBWidth(){return m_pBMI->bmiHeader.biWidth;}int GetDIBHeight(){return m_pBMI->bmiHeader.biHeight;}
};

灰度变换

彩色图片输入输入转为灰度图的视觉效果一般是通过改变色彩结构实现的,对彩色图片的每个通道使用以下变换公式就可以得到灰度图了:

Gray = R*0.299 + G*0.587 + B*0.114

但是这里运算都是浮点数运算,速度较慢。为了加快速度,可以使用以下公式:

Gray = (R*299 + G*587 + B*114 + 500)/1000

该公式里面所有运算都是整数运算,所以可以显著提高运算效率,因为是除于1000,所以加500以实现四舍五入。
运行效果:

值得一提的是:一般像素都是用八位像素保存的,一定要先进行溢出判断再赋值,不然你永远也不会发现它溢出了,别问我咋知道的。。。

马赛克

我们日常生活中经常见到马赛克,实际上马赛克的实现代码方法也是非常简单的。我在这里提供一个马赛克的实现思路:

  1. 按照固定的间隔对目标图像区域进行遍历
  2. 对于两个间隔之间的像素求统计平均(或者中位数啥的也行,但是统计平均可以保持图片能量不变,而且实现也比较简单)
  3. 使用计算结果替换掉像个像素区域中的值

以上是一个比较简单的正方形马赛克的思路,但是偶尔我们可能希望做得虽然简单,但是老师给的分也高,这个时候我们也可以来一个⚪形状的马赛克,在具体实现的时候,最主要变化的就是每个马赛克区间的范围,这个对于遍历的参数进行修改就可以实现了。
贴上一个马赛克的结果:

浮雕

实现浮雕的是要模仿光从某一个方向射入,产生亮边和阴影的赶脚,总的来说浮雕还是很好实现的。
这里提供一个简单的实现方法(网上还有更加复杂的,不过我都试过,貌似效果并没有啥差异,简单的效果貌似更加出色的鸭子),使用该公式进行计算:

img(x,y) = img(x, y) - img(x+1, y+1) + background

background浮雕背景的颜色,根据喜爱调整,值得注意的是需要进行溢出判定。如果不想进行溢出判定可以使用以下公式:

img(x,y) = (img(x, y) - img(x+1, y+1) + 255)/2

这条公式不需要进行溢出判定,但是也有个缺点,就是浮雕的效果没有第一个明显。
结果展示:

油画

油画效果也是一个比较简单的方法,主要是通过把图片中的像素转为某一区域最常见的像素的均值,以做到油画的图片的效果。
但是如果直接对于某个区域的所有所有像素都进行这个操作,就变陈均值滤波了,而且一些极端情况下会明显地改变图片地色彩结构。所以,为了防止图片的色彩结构被改变,又要实现这个效果,就把灰度分为许多个等级,选择灰度等级众数中彩色像素的平均值。给一个实现方法:

  1. 把灰度分为几个等级:比如说平均分为四个等级
  2. 对图片进行遍历,取图片a^2-1的领域,a为某一个像素进行油画处理的运算范围。
  3. 计算该范围内的灰度等级的众数。
  4. 求灰度等级为众数的像素的BGR通道的平均值
  5. 该值赋给遍历中的点
    实现效果如图所示:

全局均衡化

灰度均衡化的原理就8说啦,要做这个课设的人肯定都已经学过啦。彩色均衡化一般有两种实现方法:
一种是对于BGR每个通道进行直方图均衡化得到均衡化结果,另外一个是转为HSI图片格式,然后对于I通道进行直方图均衡化,得到均衡化结果之后转回RGB通道。
其中第一个可能会改变色彩结构,从理论上来说效果必须是第二个好的,但是奈何进行HSI的转换非常麻烦,计算速度也很慢,所以我只使用了第一种方法。有一篇对于转hsi的公式说得非常详细,有兴趣可以去看一下:https://blog.csdn.net/chaolei3/article/details/79408380/

这里只给出了灰度的步骤,彩色的话按照感兴趣的方法做吧:

  1. 求通道的灰度直方图
  2. 对灰度直方图进行归一化
  3. 对均衡化的通道可取的所有值进行遍历(RGB中是0-255)。使用以下公式计算像素的映射关系:
    p i x e l n e w ( x ) = ( L − 1 ) ∑ r = 1 x p i x e l o r i g n ( r ) pixel_{new}(x) = (L-1)\sum_{r=1}^xpixel_{orign}(r) pixelnew​(x)=(L−1)r=1∑x​pixelorign​(r)
    在实际实现的时候要注意舍入问题。
  4. 使用映射关系把通道中的像素映射到新像素中
    运行结果:

EMMM

溜去恰饭了,那就干脆分为上下两部分吧,代码链接也在下一并提供~

简单的图像特效(上)相关推荐

  1. 从零开始开发Android相机app(三)简单介绍图像滤镜功能

    目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...

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

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

  3. matlab图像特效,Matlab图象特效处理

    内容介绍 原文档由会员 刘丽 发布 Matlab图象特效处理 2万字 56页 包括开题报告,任务书,论文正文,源代码 摘要 近年来,计算机图像技术的飞速发展使个人电脑上的美术创作进入一个新的阶段,各种 ...

  4. 图像特效处理及编辑工具PhotoScape X Pro Mac

    PhotoScape X Pro for Mac是国外很流行的数码相片处理软件,Photoscape mac是一款可以帮助用户处理和浏览图片图像特效处理及编辑工具.它不仅能够将照片修饰得十分完美并且还 ...

  5. 在视频中实现图像特效

    by fanxiushu 2020-06-24 转载或引用请注明原始作者. 说起图像特效,可以打开Photoshop软件,里边有个"滤镜"菜单,再到"滤镜"里边 ...

  6. PhotoScape X Pro for Mac(图像特效处理及编辑工具)

    Photoscape for Mac 破解版不仅仅是一款有趣和简单的照片编辑器,同时它还集成了各种图片的编辑功能,可以说是轻量级的PS,使您能够修复和增强照片,简单易用,它不仅能够将照片修饰得十分完美 ...

  7. Python 计算机视觉(补充版)—— 图像特效中的油画效果

    在前面的文章 Python 计算机视觉(十五)-- 图像特效处理 中我已经介绍了大部分的图像的特效处理,但还是忽略了油画特效的处理,在本篇文章中简单介绍一下油画特效的基本原理以及代码实现,感兴趣的小伙 ...

  8. Python 计算机视觉(十五)—— 图像特效处理

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  9. 基于qml创建最简单的图像处理程序(1)-基于qml创建界面

    <基于qml创建最简单的图像处理程序>系列课程及配套代码 基于qml创建最简单的图像处理程序(1)-基于qml创建界面 http://www.cnblogs.com/jsxyhelu/p/ ...

最新文章

  1. Harmonic Number(调和级数+欧拉常数)
  2. oracle和arcgis优势,Oracle spatial 使用的一些感受
  3. 【计算理论】确定性有穷自动机 ( 自动机组成 | 自动机语言 | 自动机等价 )
  4. H3C S6800交换机基本配置命令
  5. 虚拟机3种网络模式(桥接、nat、Host-only)
  6. python selenium T3
  7. 【HDU - 5889】Barricade(最短路+网络流,最小割)
  8. vue-router-2-动态路由配置
  9. 快速生成Plugman中的lib-file、source-file的xml内容
  10. 【渝粤教育】国家开放大学2018年秋季 0553-22T色彩 参考试题
  11. 程序员求职之道(《程序员面试笔试宝典》)之民间的企业排名的可信度到底有多大?...
  12. springboot 打印日志
  13. 数学建模 最优化方法:动态规划 学习笔记
  14. Python使用 opencv对CT图进行医学处理
  15. 多个excel表合并成一个excel表
  16. 华硕无线网卡测试软件,高端便携无线网卡来了 华硕USB-AC68首测
  17. java 创建用户界面_建立图形用户界面 JAVA实验
  18. 鼠标放上去会变色的按钮
  19. 网狐DevTools数据生成器
  20. 徽商袁地保拍得史玉柱三小时 花196万学做慈善

热门文章

  1. Android U盘不可写
  2. 错过了移动互联网十年,年轻人不想洗洗睡,还有机会吗?
  3. 辽源天气预报软件测试,辽源市天气预报,辽源天气预报7天 - 今日天气 - 天气预报15天...
  4. 信息学奥数一本通 1212:LETTERS 搜索与回溯(耙耙)
  5. splice() 方法
  6. 利用vim 对每行行首增加相同的字符串
  7. Xposed原理与应用Api
  8. 算法:FLP不可能理论。
  9. 光触媒空气净化器市场现状及未来发展趋势分析
  10. 基于java+ssm+jsp的同城蔬菜配送管理系统