openCV学习笔记(2)__openCV简单的图片处理(雪花,减少颜色)
openCV简单的图片处理(雪花,减少颜色)
2012年10月12日
22:32
继而,搭建好平台之后,就可以用openCV进行简单的图片处理.这里的笔记,是在这本书(OpenCV_2_Computer_Vision_Application_Programming_Cookbook)的基础上学习的.好,言归正传.
第一个函数,在上一个的main函数里面进行实现.
雪花:(尊重原文,这里用的是原文的salt函数,撒盐``)
首先,是原图的显示:
屏幕剪辑的捕获时间: 2012/11/4 22:33
这次放在E盘,就不用用管理员权限来操作了.继续而这次的函数salt,作用是在图上按照自己需要的点数来添加白点.
源码://被注释掉的东西表示用来玩的说``
屏幕剪辑的捕获时间: 2012/11/4 22:55
大概应该可以看得出,rand()%image.cols 和 rand()%image.rows表示的就是图的column(纵列)和row(横列),对随机出来的像素进行修改.
对于if else 部分:
图像的组成,用灰度来表示.比如黑白的图像,用灰度图就可以表示出来.如果面对的是彩图,一般按照三基色(红绿蓝)每个像素由3个基本颜色的不同灰度表示,也就是说,如果image 的channel为3的时候,需要修改三个channel的参数,而如果单单是黑白,channel只有1,那么只要修改一个参数就可以.
可知,255是一个尽头``` 白色``
函数的主体如下:
屏幕剪辑的捕获时间: 2012/11/4 22:56
//注释的colorReduce是下一个函数
运行结果``如下``:
屏幕剪辑的捕获时间: 2012/11/4 22:58
加上10000捏``?
屏幕剪辑的捕获时间: 2012/11/4 22:59
屏幕剪辑的捕获时间: 2012/11/4 23:02
如果参数改成0?
屏幕剪辑的捕获时间: 2012/11/4 23:04
结果如下:
屏幕剪辑的捕获时间: 2012/11/4 23:05
撒胡椒的说`` 黑色是白色的另外一端``
每一个像素是又一个8-bit的 unsigned char型储存,因而色的数目就有256x256x256个.数目之大,因而,下面的函数是用来减少颜色的种类的.
函数主体:
屏幕剪辑的捕获时间: 2012/11/4 23:14
当中的div可以理解为每个灰度级划分的多少.
屏幕剪辑的捕获时间: 2012/11/4 23:19
这个函数体是主要的处理,例如是256色,这个表达就会把[0,div)区间的色素变成div/2的,[div,2*div)的就会变成3*div/2,把周围附近的色调简化为一个色调.这样对颜色进行了简化.
运行结果如下:
屏幕剪辑的捕获时间: 2012/11/4 23:22
效果不太明显.
把div换成是64的话:
屏幕剪辑的捕获时间: 2012/11/4 23:23
继续加强的话:
屏幕剪辑的捕获时间: 2012/11/4 23:24
屏幕剪辑的捕获时间: 2012/11/4 23:24
随着分化,颜色表示的单调性会让颜色越来越枯燥.
函数的主体,把salt注释掉,把colorReduce加上就好.
记得要在主体前面加上声明,
屏幕剪辑的捕获时间: 2012/11/4 23:26
ps:对于colorReduce的函数,主体还有几个方法:
data[i]= data[i] – data[i]%div + div/2;
和上述的方法一样,不过这个是先退回到原点在加上div/2
另外一个,是使用位运算:
uchar mask= 0xFF<<n; // e.g. for div=16, mask= 0xF0
data[i]= (data[i]&mask) + div/2;