精华内容
下载资源
问答
  • 关于图像位深度,色深的小结 **说明:**有不对的地方恳请指正,这方面不是太确定。 1. 正文 一张图像包括基本的信息(长,宽,通道) from PIL import Image import numpy as np img = Image.o...

    every blog every motto: Just live your life cause we don’t live twice.

    0. 前言

    关于图像位深度,色深的小结
    说明:

    • 有不对的地方恳请指正,这方面不是太确定。
    • 代码基于jupyter notebook
    • 关于dtype 的辨析,可以参考我是dtype辨析

    1. 正文

    一张图像包括基本的信息(长,宽,通道)

    from PIL import Image
    import numpy as np
    img = Image.open('ele.jpg')
    img
    

    在这里插入图片描述

    img.size
    

    在这里插入图片描述

    img_array = np.array(img)
    img_array.shape
    

    在这里插入图片描述
    那什么又是位深度呢?

    1.1 位深度(bit depth)

    • 单个像素点(一个通道)上需要用多少比特(bit)来存储数据,常见的是8位
    • 8位,像素点的范围是0-255(256个值),因此位深度是8

    1.2 色深

    • 单个像素点(图片中所有通道)上需要用多少比特(bit)来存储数据。
    • 比如,对于一张RGB的彩色图像,一个通道上的一个像素点,是8位;对于整张图像(三个通道)上的一个像素点,色深是24位(3*8),

    一句话概括:位深度,每一个像素(仅看一个通道)存储所需要的位(bit)数;色深,每个像素(整张图片,或是说所有通道)存储所需要的位(bit)数;
    从某种意义上,二者一样,只是看到角度不同。

    1.3 查看及改变位深度

    from PIL import Image
    im = Image.open("xiao.png")
    print(im.getbands())
    输出:
    ('R', 'G', 'B')
    

    根据返回的模式(model),依照下表,可知道具体的位深度。
    在这里插入图片描述

    1.4 改变图像位深度

    1.4.1 方法一

    先转成数组,数组转成图片时,改变位深度

    img = Image.open('16label.png')
    img_array = np.array(img)
    
    img.getbands()
    

    根据模式(model) ,可知,图像属于32位整型图像
    在这里插入图片描述

    img_array.dtype
    

    也可以通过将图片转换成数组,后查看数组内数据的类型,知道。
    在这里插入图片描述
    转成成8位图像

    img = Image.fromarray(np.uint8(img_array))
    img.getbands()
    

    由返回的模式知道,图像已转换位8位图像。
    在这里插入图片描述
    图片再转换成数组,验证

    img_array = np.array(img)
    img_array.dtype
    

    在这里插入图片描述

    1.4.2 方法二

    图片转成数组时改变位深度,数组再转成图片

    img2 = Image.open('test2.png')
    img2.getbands()
    

    在这里插入图片描述
    改变数组的数据类型

    img_array2 = np.array(img2,dtype='uint8')
    img_array2.dtype
    

    在这里插入图片描述

    img2 = Image.fromarray(img_array2)
    img2.getbands()
    

    在这里插入图片描述

    1.4.3 小结

    改变位深度的两种方法,形象化的理解就是在如下的位置(1 或 2)中改变。
    在这里插入图片描述

    1.5 图片和数组相互转换(附)

    from PIL import Image
    import numpy as np
    img = Image.open('ele.jpg')
    

    图片转数组

    img_array = np.array(img)
    

    查看数据类型

    type(img_array)
    

    在这里插入图片描述
    数组转图片
    方法一:

    img_new = Image.fromarray(np.uint8(img_array))
    

    方法二:

    img_new = Image.fromarray(img_array.astype('uint8'))
    

    参考文献

    [1] https://zdaiot.com/Python/%E5%B8%B8%E7%94%A8%E7%AC%AC%E4%B8%89%E6%96%B9%E5%8C%85/PIL%E6%80%BB%E7%BB%93/
    [2] https://blog.csdn.net/bigapple88/article/details/5625742?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4
    [3] https://blog.csdn.net/csdn66_2016/article/details/82850695
    [4] https://pillow.readthedocs.io/en/5.2.x/handbook/concepts.html?highlight=getbands
    [5] https://blog.csdn.net/weixin_39190382/article/details/104975601
    [6] https://blog.csdn.net/csdn_gddf102384398/article/details/85543360?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
    [7] https://blog.csdn.net/csdn66_2016/article/details/82850695

    展开全文
  • 1、什么是位深度 单个像素点(一个通道)上需要用多少比特(bit)来存储数据,常见的是8 8,像素点的范围是0-255(256个值),【255转二进制为11111111】因此位深度是8 2、深色 单个像素点(图片中所有...
    1、什么是位深度
    • 单个像素点(一个通道)上需要用多少比特(bit)来存储数据,常见的是8位

    • 8位,像素点的范围是0-255(256个值),【255转二进制为11111111】因此位深度是8

    2、深色
    • 单个像素点(图片中所有通道)上需要用多少比特(bit)来存储数据。
    • 比如,对于一张RGB的彩色图像,一个通道上的一个像素点,是8位;对于整张图像(三个通道)上的一个像素点,色深是24位(3*8)

    一句话概括:位深度,每一个像素(仅看一个通道)存储所需要的位(bit)数,深色,每个像素(整张图片,或是说所有通道)存储所需要的位(bit)数。

    从某种意义上,二者一样,只是看到角度不同。

    3、查看位深度
    from PIL import Image
    
    im = Image.open("test.png")
    print(im.getbands())
    
    输出:
    ('R', 'G', 'B')
    

    根据输出的结果,查下表得到相应的位深度
    在这里插入图片描述

    4、改变位深度

    在我们读取图像的时候,可能传过来的图像位深度是24位,但是正确处理的是8位,这样要怎么转化呢?我们可以在读取这张图像的时候进行24位读取并转成8位:
    在这里插入图片描述

    from PIL import Image
    import numpy as np
    
    img = Image.open('test.jpg').convert('L')
    print(img.getbands()) # ('P',) 这种是有彩色的,而L是没有彩色的
    img.save('test_new.jpg') # 转换后的进行保存
    

    以上是修改单一图片的位深度,如果想要批量修改,需要写循环进行实现。

    from PIL import Image
    import os
    
    path = "test"
    save_path = "test_res"
    
    files = os.listdir(path)
    # print(files)
    
    for pic in files:
        # print(pic)
        img = Image.open(os.path.join(path,pic)).convert('RGB')
        print(img.getbands()) # ('P',) 这种是有彩色的,而L是没有彩色的
        # print(img.size)
        
        # file_name, file_extend = os.path.splitext(pic)
        # print(file_name,file_extend)
        # pic_new = os.path.join(os.path.abspath(save_path), file_name + '.jpg') 
        
        # pic_new = os.path.join(os.path.abspath(save_path), pic) 
        pic_new = os.path.join(save_path, pic) 
        
        img.save(pic_new)
    

    参考:

    https://blog.csdn.net/weixin_44617502/article/details/113567148

    https://juejin.cn/post/6859272981948923912

    展开全文
  • 图像位深度理解

    千次阅读 2019-05-15 17:34:18
    8位深度如何去读取一张图的通道数目? 一张图片是彩色的,例如是BGR格式的 那么该图也有可能是8位深度的,位深度不能说明这张图是彩色的还是黑白的,说明的是在总通道中所能表达的颜色数目。对 261.png来说,在R...

    8位深度如何去读取一张图的通道数目?

    一张图片是彩色的,例如是BGR格式的
    那么该图也有可能是8位深度的,位深度不能说明这张图是彩色的还是黑白的,说明的是在总通道中所能表达的颜色数目。对 261.png来说,在R通道最大的数是128,B,G通道的最大值是多少?这说明该图是BGR格式的(通过opencv读取图片cv2.imread()与skimgae.io.read())。
    说明该图片中BG通道是0 位深度的 所取的值要么是0要么是1,因为()。。。

    读取图片的信息:有关于PIL模块的理解
    https://www.cnblogs.com/chimeiwangliang/p/7130434.html

    pil

    PIL读取图片 ,不改变通道顺序以及不改变通道数:

    >>> img=Image.open("./1.png")
    >>> img.size
    (2448, 2048)
    >>>
    

    PIL 旋转照片 不改变图片信息
    https://www.cnblogs.com/sun-haiyu/p/7127582.html

    本人的代码实例:

    pic_path="./new_ss_data/pic/"
    pic_mask="./new_ss_data/cv2_mask/"
    file_pic="./pil_img/pic/"
    file_mask="./pil_img/cv2_mask/"
    file_labelme="./pil_img/labelme_json/"
    count=len(os.listdir(pic_path))
    for i  in range(count):
        #img_mask=Image.open(pic_mask+str(i+1)+".png")
        img_pic=Image.open(pic_path+str(i+1)+".png")
        #img_mask.rotate(180).save(file_mask+str(i+1)+".png")
        img_pic.rotate(180).save(file_pic+str(i+1)+".png")
    
    展开全文
  • opencv-图像位深度

    千次阅读 2019-12-09 14:03:54
    矩阵数据类型 – CV_<bit_depth>(S|U|F)C<...CV_8UC1 是指一个8无符号整型单通道矩阵, CV_32FC2是指一个32浮点型双通道矩阵 CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1 CV_8UC2 CV_8SC2 CV_1...

    类似CV_8UC1是Mat的类型,其定义为type = CV_(位数)+(数据类型)+(通道数)。

    CV_8UC1=0    CV_8UC2=8    CV_8UC3=16   CV_8UC4=24  ————depth:0
    CV_8SC1=1     CV_8SC2=9    CV_8SC3=17    CV_8SC4=25  ————depth:1
    CV_16UC1=2    CV_16UC2=10    CV_16UC3=18   CV_16UC4=26  ————depth:2
    CV_16SC1=3   CV_16SC2=11   CV_16SC3=19   CV_16SC4=27  ————depth:3
    CV_32SC1=4   CV_32SC2=12   CV_32SC3=20   CV_32SC4=28  ————depth:4
    CV_32FC1=5   CV_32FC2=13   CV_32FC3=21   CV_32FC4=29  ————depth:5
    CV_64FC1=6   CV_64FC2=14   CV_64FC3=22   CV_64FC4=30  ————depth:6

    这里U(unsigned integer)表示的是无符号整数,S(signed integer)是有符号整数,F(float)是浮点数。 
    例如:CV_16UC2,表示的是元素类型是一个16位的无符号整数,通道为2. 
    C1,C2,C3,C4则表示通道数是1,2,3,4 

    elemSize 
    矩阵一个元素占用的字节数,例如:type是CV_16SC3,那么elemSize = 3 * 16 / 8 = 6 bytes

    elemSize1 
    矩阵元素一个通道占用的字节数,例如:type是CV_16CS3,那么elemSize1 = 16  / 8 = 2 bytes = elemSize / channels

    data  uchar型的指针。Mat类分为了两个部分:矩阵头和指向矩阵数据部分的指针,data就是指向矩阵数据的指针。

     

    矩阵数据类型

    – CV_<bit_depth>(S|U|F)C<number_of_channels>
    S = 符号整型 U = 无符号整型 F = 浮点型

    CV_8UC1 是指一个8位无符号整型单通道矩阵,
    CV_32FC2是指一个32位浮点型双通道矩阵
    CV_8UC1 CV_8SC1 CV_16U C1 CV_16SC1
    CV_8UC2 CV_8SC2 CV_16UC2 CV_16SC2
    CV_8UC3 CV_8SC3 CV_16UC3 CV_16SC3
    CV_8UC4 CV_8SC4 CV_16UC4 CV_16SC4
    CV_32SC1 CV_32FC1 CV_64FC1
    CV_32SC2 CV_32FC2 CV_64FC2
    CV_32SC3 CV_32FC3 CV_64FC3
    CV_32SC4 CV_32FC4 CV_64FC4

    其中,通道表示每个点能存放多少个数,类似于RGB彩色图中的每个像素点有三个值,即三通道的。
    图片中的深度表示每个值由多少位来存储,是一个精度问题,一般图片是8bit(位)的,则深度是8.

    convertScaleAbs

    • 0-255 :CV_8U类型图片
    • 0-65535: CV_16U类型图片
    • 0-1: CV_32F类型图片

    深度显示范围:(说当定义了如下不同深度的时候,像素的灰度值要处于显示范围之中才可以显示出来。否则要进行转换)

         测试double型:0.0--1.0之间                              IPL_DEPTH_64F

          测试float型:0.0--1.0之间                                  IPL_DEPTH_32F

          测试long型:0--65535之间                                IPL_DEPTH_32S        

          测试short int型:-32768--32767之间                 IPL_DEPTH_16S        

          测试unsigned short int型:0--65535之间           IPL_DEPTH_16U

          测试char型:-128--127之间                               IPL_DEPTH_8S          

          测试unsigned char型:0--255之间                     IPL_DEPTH_8U

     不同深度图像的转换

    要注意范围
    比如IPL_DEPTH_8U 转到 IPL_DEPTH_32U 要用cvConvertScale(pImg8, pImg32, 1.0/255, 0); 要除255。
    反过来IPL_DEPTH_32F 到 IPL_DEPTH_8U 要:cvConverScale(pImg32, pImg8, 255, 0); 要乘以255。

    Mat depth1;
    depth.convertTo(depth1,CV_16U,1.0/500);
    convertTo 用于将对象图像像素格式转换为指定像素格式。 
    第三个参数为缩放因子,即图像每个像素值除以500,注意为double类型

     

    展开全文
  • 参考文章:8, 16,24,32图片显示原理及对比
  • 本文介绍了图像深度、像素深度、深的概念,图像深度是指表示图像的像素中有多少用于表示颜色,像素深度是指图像中一个像素占用的位数,深是指像素的通道占用的位数。像素深度大于等于图像深度,等于所有通道...
  • labelme 标注生成24位深度图像转换为8

    千次阅读 热门讨论 2019-07-04 20:11:34
    最近在看别人程序时发现经过图像标注生成的 label 一片黑,且图像深度为 24 ,如下图所示 原始图像 生成的 label 图 label 图信息 运用matlab读入显示0,1 ; 说明图像中存在两种像素 而我的程序需要...
  • Kinect的深度图像和红外图像都是16位深度,利用Matlab标定时,新版本Matlab工具箱进行标定时是没有问题的。但是因为新版本中无法实现不同分辨率左右相机图像的立体标定,得到左右相机的相对位姿。所以用了一款老版本...
  • 每天学一点图像处理--位深度

    千次阅读 2018-01-09 10:23:44
    当查看图像的时候,除了长和宽 还有位深度位深度的含义就是 用多少(bit)来表示来表示一个像素(可以理解为图像上的一个点) 当图像是灰度图时,像素点的范围是0-255 那么用8表示就足够了,因此位深度是8...
  • 深度图像

    万次阅读 多人点赞 2014-11-03 14:37:26
    深度图像(depth image)也被称为juli
  • 16位深度图像转8灰度

    万次阅读 2019-08-14 16:46:42
    opencv使用imread读取16位图像时需要增加参数:cv2.IMREAD_UNCHANGED 这样才是读取原数据,其通道数才不会改变 image1=cv2.imread(os.path.join(img,imgs[i]),cv2.IMREAD_UNCHANGED) opencv保存16位图像时候必须...
  • RGB-D(深度图像) & 图像深度

    万次阅读 多人点赞 2017-06-22 17:43:02
    RGB-D(深度图像)   深度图像 = 普通的RGB三通道彩色图像 + Depth Map   在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像图像通道。其中,Depth Map 类似于...
  • 图像深度 depth

    万次阅读 多人点赞 2019-04-12 21:48:10
    转载自:...    ...图像深度是指存储每个像素所用的位数,他也是用来度量图像的色彩分辨率的。他确定了彩色图像的每个像素可能有的色彩数,或者确定灰度图像...
  • 图像转化为深度图,深度图转化为图像,点云转化为深度图 原图像深度图像: 额外插图: 将点云数据转化为深度图像(上面点云三维图,下面深度图)不是一一对应关系 代码: from PIL import Image import numpy ...
  • 位深度:存储图片一个像素需要消耗多少个bit图像色深:图像的一个像素可以表示多少个bit的颜色。 通道:不同格式图片存储像素的方式,RGB图像的通道为3,灰度图像的通道为1. dpi:dots per inch,每英寸点...
  • 数据加载相关前言图片的通道数、位深度单通道三通道四通道通道数之间的转化二值化图像小结灰度图像小结pillow库相关全部代码 前言 首先我们都知道,图像是由一个个像素点组成的。图片在计算机中的存储方式为矩阵存储...
  • 彩色图像深度图像合成点云

    千次阅读 2019-06-27 15:10:02
    深度图像 点云图 从2D到3D(数学部分) 上面两个图像给出了机器人外部世界的一个局部的信息. 假设这个世界由一个点云来描述:X={x1,…,xn}.其中每一个点,有r,g,b,x,y,z一共6个分量,表示它们颜色与空间位置...
  • Opencv 图像深度+转换深度

    万次阅读 2018-08-06 17:09:51
    1. opencv 图像深度 图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率.图像深度确定彩色图像的每个像素可能有的颜色数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多...
  • 二值图像 二值图像(Binary Image),按名字来理解只有两个值,0和1,0代表黑,1代表白,或者说0表示背景,而1表示前景。其保存也相对简单,每个像素只需要1bit就可以完整存储信息。即图像上的每一个像素点的像素值...
  • 单幅散焦图像深度恢复

    千次阅读 2018-10-23 22:44:26
    论文提出了一种很实用的方法边缘检测法,这种方法将一幅散焦图像建模成为一幅清晰图像与一个PSF做卷积运算,然后依靠场景中的物体边缘位置的模糊量与深度对应关系估算出深度信息。然后下面简述一下论文当中的具体...
  • 如上,给出图像位深度及其取值范围后,我们不难理解,要转换位深度本质上就是对原深度下的数据做线性变换,使原位深度下的最小值和最大值分别对应转换后位深度下的最小值和最大值。实现上述线性变换,我们可以用...
  • 最近一直在忙毕业设计,关于kinect深度图像增强的,只是编程能力太差,弄了好久都没弄出来,只能在此求助各位大神
  • 图像处理(6)--图像深度

    千次阅读 2019-07-10 14:36:55
    图像深度是指存储每个像素所用的位数,也用于量度图像的色彩分辨率。图像深度确定彩色图像的每个像素可能有的颜色 [1] 数,或者确定灰度图像的每个像素可能有的灰度级数.它决定了彩色图像中可出现的最多颜色数,或...
  • RGB-D(深度图像)与图像深度

    千次阅读 2020-09-17 10:05:22
    深度图像 = 普通的RGB三通道彩色图像 + Depth Map 在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像图像通道。其中,Depth Map 类似于灰度图像,只是它的每个像素值是...
  • 深度学习图像标注工具汇总

    万次阅读 多人点赞 2018-01-11 17:32:15
    但是数据标注是个耗时耗力的工作,下面介绍几个图像标注工具: 团队协同 CVAT 多用户在线协同 用户管理,权限设置 检测标注 多目标跟踪标注 分类,分割,关键点标注 语音标注 标注的便捷性(快捷键,N) 是否支持...
  • 图像色深与位深度的区别

    千次阅读 2019-09-08 12:03:10
    深是指存储每个像素所用的位数,例如一副32100*100像素的图片,其大小为:10...
  • 深度相机的图像深度实时显示

    千次阅读 2019-11-23 01:02:13
    最近有了一个intel 的 D435i 深度相机,网上找了一个实时显示图片和深度图的python 程序,最开始是一个博客,后来发现在intel 的github里也有。都找不到链接了,觉得不错,修改整理成本文。 首先要安装好...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 278,624
精华内容 111,449
关键字:

图像位深度