您的位置:首页 > 其它

数字图像处理不得不知的点(2)

2016-05-05 19:41 267 查看
【接前面一二三四五】

六、IplImage里面部分数据的意义:

一幅图像



当然这个的显示多了一个框框。

图像本身的数据:



IplImage 里面的基本数据

src->depth 图像深度 8

src->nChannels 图像的通道数 3

src->width 图像的宽度像素 154

src->height 图像的高度像素 200

src->widthStep 图像的行所占字节数 = width*nChannels = 154*3//然而并不总是相等,或者其实并不相等。

见:http://blog.csdn.net/bzdwdmzjsmff/article/details/51336633 第九点

位深度如果对应于一个cvMat里面的一个数据的话应该是:CV_8UC3

看出宽是154个像素。高是200个像素

所以创建一个这样的图像的话应该是:

cvCreateMat(200,154,CV_8UC3);


如果是IplImage的话,它的创建应该是

cvCreateImage(cvSize(154,200),8,3);

IplImage *src = cvLoadImage(“pic.jpg”,1);//


七、彩图的一个像素为什么通常是 8位深,3通道?

打开ps,然后打开拾色器。就会发现红色可以这样描述:当前选中的颜色,有一个直观的色彩表示方法,然后由hsb,lab,rgb,cmyk四种色彩空间,其中rgb采用了两种形式描述一种是:显而易见的,RGB还有一种是#6b3522。



拾色器采用了类似HSV的描述方法,可以看到对比图。下图来自:

http://www.360doc.com/content/13/1105/14/10724725_326803150.shtml



为什么是8位?

对于RGB这种颜色模式来说,红就是rgb(255,0,0),不红就是rgb(0,0,0)那么在红与不红之间,我们把它分成256份。0代表红色没有,255代表红色加到最足。

128大概是这样一个状况:rgb里面的中间红色。



这种分法就是从红到黑分了256份。数值越大越红。

当然你也可以定义一种比如你的名字叫做李明,有一种李明色彩空间,李明说我的世界就是红与黑。就这一个通道。然后他还说了,256太多了,数不过来,就定义了3种颜色,哪一种就是黑,一种就是中间红,还有一种就红。那这是他的色彩空间。

他一共就数3个数就描述了这种色彩空间0,1,2。

然而大千世界,这并不够,所以我们多分了几份儿,我们把RGB三种色彩空间分成了每个颜色从黑到红,从黑到绿,从黑到蓝都分成了256份。那蓝绿色不动,红色从0到255是256种情况,绿色也是256中,蓝色也是256。所以对于分成8位的这个方式我们把颜色排列一下得到256*256*256种颜色。

不过问题又来了,好像这么分的确是好啦。不过为什么不是7位或者4位或者10位来划分一个颜色梯度。10位能表示更多的色彩呢。这么说的确说有道理。那么从另外一个角度来分析吧。

【这个应该是长期磨合的过程。颜色的确开始有可能被分成了100个梯度或者200个。至于为什么最后就变成了256个。可能是由于如果刚好一个字节是8位。8位可以表示256种状态。而这种色域对于我们人眼来看,就足够丰富了,那么两者一拍即合。所以全是猜测的,谁知道他们怎么分的。。。但是应该也有据可考】

八、那么为什么一个字节是8个二进制位呢?

//百度里面网友对于这个的解释很坑,答非所问。

https://www.zhihu.com/question/20870588

详细的看这里,就记住一句话历史原因就可以了,由于历史的设定,以及普及程度,加上工业化的运用,很多东西如果脱离了商业就跑不动,如果加上商业就飞一样的跑。【比如大家现在都在吵吵的 所谓云技术,云技术卖的就两个点,云存储、云计算,无非是有些地方存储很厉害,包括存,足够大,取,足够快,这样就能够卖存储。对于计算,就是有些处理器很强大,处理足够快,这样就可以卖计算。因为不知道存储或者计算的点到底在哪里,所以又加了一个概念叫做云。其实这个东西有前身的,云计算的前身在国内是有前身的叫做网格计算,也是分发到各个地方去处理数据,把结果进行交付。只不过当时是科研用途,并没有做商业推广,本身名字也不如云计算顺口,不好推广,没经力支持,所以慢慢慢慢就没人提了。】把8作为2进制位,加上本身换算容易。所以就顺理成章的成为八进制表示一个字节。

而字节这个概念,来自我们熟悉的A-65 0-48 a-97,的那张ASCII码,一个美国字加各种字符是127还是128个啊?总之2的7次方就表示了,所以一个字节也曾经是7位过,就是7位能够刚好表示一个字。所以可能加上一些翻译的原因,最终变成了字节这种叫法,但是其实就是1个字可以用7个二进制位表示。

加上历史原因一个字用8个二进制位表示。

加上翻译原因,一个字节用8个二进制位表示。

【关于字为什么翻译做字节 字节为什么 是字 的说法,纯属杜撰,帮助理解,囧囧囧】

我们要做的是 熟悉这两种rgb的表示方式,rgb(255,0,0)和#ff0000。并且会换算。并且能够看到一种颜色,经过不断调试,基本上弄出一个颜色。

这种数字的组合,就是能量的叠加,当一个地方同时接受红黄蓝三色光的时候就是白色,随着能量的减少,最后就变成了黑色。所以如果颜色深,数值就往小给,如果颜色鲜亮,就往大里给。偏什么色就往里面加什么颜色。

给出几个示例,

这种习题就自己练习吧,比如写出红绿蓝三色, 黄色的表示,粉色的表示,灰色的表示,然后是快速写出你的鼠标垫的主色调的颜色。如果是黑色的话就写一个紫色的。总之稍微练习一下。

既然8位能够表示,那么从红到黑分成16384份,那就是16位表示,行不行,当然也行。关于到底分成多少份有什么用

参考

http://wenda.hexun.com/question/34986.html

中的数模转换器部分



模-数转换器(ADC):12位与14位

每台数码相机都有某一种模-数转换器,将传感器捕捉到的模拟信号转换为构成最终图像的数字信号。大部分数码单反相机使用12位或14位ADC。

在这里,ADC的位数与传感器可以捕捉到的灰阶级数有关。例如,12位的ADC,其每个像素可以捕捉4,096级灰阶;而14位的ADC每个像素可以捕捉16,384级灰阶。

如此看来,14位ADC毫无疑问是赢家:其可捕捉的灰阶值是12位的4倍!不过,多出来的2位并不能增加相机的动态范围,而只是在一定的动态范围内,增加了灰阶级数。就像把一块长面包切片,把每片都切成原来的一半,总片数增加一倍,同时每一片都变薄了,但面包并没有变大。(译者注:就是说14位ADC可以获得更细腻的层次过渡

所以,14位ADC可以使你获得更佳的画质,但是这种改善只在阴影和平滑的渐变过渡(比如日落照片)中比较明显。



分多了并不会怎样,只不过能表述更多的细节,你发现你的书的书页都是白色的,但是那些白色都一样么?不都一样那么到底有什么差异?如果在黑白图里面,只能告诉你都是白色。但是如果在灰度图里面,你会发现有些色差,如果分的份数越多,那么细节就描述的越细腻,有时候你根本不知道#FFCCCC跟#FFCCCB有什么区别。【事实上我觉得你就是不知道如果不告诉你谁是谁的话,并且在不同光照的情况下你可能觉得后面一个色会更亮一点。】所以通常我们就用一个字节8个二进制位来表述某个通道的值。用256*256*256表述我们能见到的所有色彩,事实上基本足够用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: