OpenCV-Python学习教程.4

import cv2
image = cv2.imread('./img/111.jpg')
size = image.shape
w = size[1] # 宽度
h = size[0] # 高度
s = size[2]
print(size)print(type(size))print(w)print(h)print(s)print(type(s))

如何获得一个照片的长宽和通道信息

shape是一个元组的类型

我们可以读取出来

from PIL import Imageim = Image.open('./img/111.jpg')print(im.getbands())

老实讲,到现在都没有写出来可以获得图像的深度的代码

waitKey(int delay=0)函数,函数功能:

  1. 按下键的时候,焦点要落在窗口上,不能落在cmd窗口上;

  2. 必须在有窗口显示的情况下,waitKey才有作用,否则无效。比如调用cv.waitKey(0),如果此时没有活动的窗口,该函数立刻返回-1;

  3. waitKey()函数的功能是不断刷新图像,频率时间为delay,单位为ms,延时delay > 0 函数返回值为按下的键的ASCII码值,超时则返回-1。;

  4. 返回值为当前键盘按键值;

  5. 如果delay<0,等待时间无限长,返回值为按键值;

  6. 经常程序里面出现 if( waitKey(10) >= 0 ) 是指10ms内按任意键进入此 if 块;

图像的深度:

图像中像素点占得bit位数,就是图像的深度,比如:

二值图像:图像的像素点不是0 就是1 (图像不是黑色就是白色),图像像素点占的位数就是 1 位,图像的深度就是1,也称作位图。

灰度图像:图像的像素点位于0-255之间,(0:全黑,255代表:全白,在0-255之间插入了255个等级的灰度)。2^8=255,图像的深度是8。

以此类推,我们把计算机中存储单个像素点所用的 bit 位称为图像的深度。

图像的通道:

有了图像深度的概念,我们知道如果是24位的图像,则这个像素点的颜色的取值范围是:从0到2^24。这个范围特别大,如果我们知道了某点的像素值怎么判断像素点的颜色呢?

我们知道 RGB是基本的三原色,如果我们用8位代表一种颜色,每种颜色最大是255,这样每个像素点的颜色值的范围就是(0-255,0-255,0-255)。这样图像的通道就是3。

灰度图的图像存储模型

灰度图像像素点的存储就是对应的原图从左到右,从上到下,依次排列,每个点的值就是就是像素点的值,每个点的地址就是像素像素点的地址。

RGB图的图像存储模型

RGB彩色图像和灰度图相比,每个像素点都有3个通道。每个通道占的内存空间都是8位。在内存中,RGB 图像的存储是以二维数组的形式。

学习图像的存储就是为了理解图像中像素点的存储情况,有助于我们对每个像素点的操作。

注意:我们对图像像素的遍历其实对每个像素点中通道的遍历。

我们接着来进行颜色空间的压缩:

什么是颜色空间的颜色呢?

我们知道,对于3通道的深度是8的 RGB 图像,一共可以有255^3中颜色,如此庞大的颜色对我们的处理很不方便,我们可以对图像的像素进行量化。减小图像的颜色种类,同样也可以达到同样的效果。比如我们把图像的像素减少8倍,则每个通道只能有256/8=32中颜色,这样的话,原来图像的0-7像素点对应量化后的0,原来的图像的8-15对应量化后的图像的1,......原来图像中的248-255对应量化后的32。这样就能实现对图像的压缩。

那么这种办法在编程怎么实现?

很简答的,直接利用C/C++中 int 变量的 “/” 运算,这样的话,像素(0-7)/ 8 =0。同理依次可以得到压缩后像素值。

上面的分析知道了,图像的存储就是以二维数组的形式,如果取一个二维数组中元素的话。常规的方法就是先确定行,然后再确定列。这样就能把这个元素取出来。

OpenCV中Mat类中定义的指针,可以获取某一行的地址,然后确定列数就可以获取我们所需要的地址。

Mat 类中有:Mat.ptr<uchar>(int i=0) 获取像素矩阵的指针,i 是从第零行开始的。这块有点像二维数据的存储那样,二维数组可以当做是若干个一维指针,如果知道了每个行的第一个元素就能遍历这个行所有数据。

具体的程序代码:

修改:

内层循环可以用指针实现移动到下一列:

*pt++=(*pt/n)*n+n/2;
https://blog.csdn.net/u013355826/article/details/64905921
(0)

相关推荐

  • PS颜色调整教程,色彩调整“去色”深度分析

    去色:是指将图片的彩色去掉,使用黑.白.灰三种颜色来表现图像,使之成为无彩色图像, 去色原理:PS软件通过一种默认的算法,将彩色图像运算转化成灰度图像,即只用黑.白.灰来表达原来的图像. 原 图 去色 ...

  • Python学习教程:Python 内置函数最全汇总(上篇)

    Python学习教程:Python 内置函数最全汇总(一) 1 abs() 绝对值或复数的模 In [1]: abs(-6)Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素都为 ...

  • Python学习教程:Python内置函数大总结(下篇)

    这里接着上次的Python学习教程,给大家总结了Python 剩下的33个内置函数. 31 hash() 返回对象的哈希值 In [112]: hash(xiaoming)Out[112]: 6139 ...

  • Redis和MongoDB哪个好?Python学习教程!

    Redis和MongoDB都是NOSQL数据库,采用结构型数据存储,在学习Python的过程中,我们也会接触到这方面的知识,那么你知道Redis和MongoDB各具有怎样的优劣势吗?我们一起来了解一下 ...

  • Python代码区分大小写吗?python学习教程

    大家都知道,很多编程语言在撰写代码的时候是区分大小写的,那么Python代码区分大小写吗?我们一起来看看吧. Python代码区分大小写吗? 答案是:当然.Python中的代码是区分大小写的,无论是变 ...

  • Python三大主流框架对比!Python学习教程

    在Python语言中,有三大主流框架,它们分别为:Flask.Django.Tornado,各具有独特的优势,也是学习Python时必须掌握的框架,那么它们之间有什么区别呢?我们一起来看看详细的介绍. ...

  • Redis集群方案怎么做?Python学习教程

    Redis集群方案该怎么做?都有哪些方案?Redis回收进程是如何工作的?这是面试找工作期间最常见的问题,接下来我们一起来看看吧. Redis集群方案该怎么做?具体分为三种: 1. codis:目前用 ...

  • 集合和列表有什么区别?Python学习教程

    学习Python的人应该都听说过集合和列表,也知道集合是处理数学问题的工具,列表是处理数据友好的工具,那么它们之间有什么区别呢?我们一起来看看吧. 什么是集合呢?集合是无序的.不重复的数据集合,它本身 ...

  • Python字符编码有几类?Python学习教程

    刚开始学习Python,肯定少不了基础知识的了解,比如说字符编码,那么你知道Python常见字符编码有哪些吗?我们一起来看看Python字符编码的常用种类吧. 第一种:ASCII码.是基于拉丁字母的一 ...

  • TCP和UDP区别是什么?Python学习教程

    TCP和UDP同属于协议,在学习Python的时候都会涉及到这方面的知识,那么TCP和UDP区别是什么呢?我们来看看它们的优缺点吧. 什么是UDP? UDP是面向无连接的通讯协议,UDP数据包含目的端 ...

  • Python自动化运维可以做什么?Python学习教程

    自动化运维可以说是Python的自留地,是Linux运维工程师首选的编程语言,而且Python在自动化运维方面深入人心,受到了大家的追捧.那么,你知道学了Python自动化运维可以做什么吗?带着你的疑 ...