uint8_uint8array - CSDN
  • int8 uint8 区别

    2016-05-27 02:54:08
    按照posix标准,一般整形对应的*_t类型为: 1字节 uint8_t 2字节 uint16_t 4字节 uint32_t 8字节 uint64_t
    pecific integral type limits
    Specifier Common Equivalent Signing Bits Bytes Minimum Value Maximum Value
    int8_t signed char Signed 8 1 −128 127
    uint8_t unsigned char Unsigned 8 1 0 255
    int16_t short Signed 16 2 −32,768 32,767
    uint16_t unsigned short Unsigned 16 2 0 65,535
    int32_t int Signed 32 4 −2,147,483,648 2,147,483,647
    uint32_t unsigned int Unsigned 32 4 0 4,294,967,295
    int64_t long long Signed 64 8 −9,223,372,036,854,775,808 9,223,372,036,854,775,807
    uint64_t unsigned long long Unsigned 64 8 0 18,446,744,073,709,551,615

     

     

    上面是一些与平台无关的数据类型,由于在32位机器和64位机器中,long占据不同的字节数,所以推荐使用上面的类型。。上面的类型的头文件是stdint.h

    展开全文
  •  matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。...

    1. matlab图像保存说明

      matlab中读取图片后保存的数据是uint8类型(8位无符号整数,即1个字节),以此方式存储的图像称作8位图像,好处相比较默认matlab数据类型双精度浮点double(64位,8个字节),自然可以节省很大一部分存储空间。
      详细来说imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。例如,彩色图像像素大小是400*300( 高 * 宽 ),则保存的数据矩阵为400*300*3,其中每个颜色通道值是处于0~255之间。
      但是虽然matlab中读入图像的数据类型是uint8,而在图像矩阵运算的时候,使用的数据类型却是double类型。一是为了保证精度,二是因为如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为: 

    Function ‘*’ is not defined for values of class ‘uint8’

      1个字节无符号整型最大只能存储数据为255,对图片的操作所以很容易溢出。

    2. matlab图像类型转换

      matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,区别如下:

    img = imread('./1.jpg'); % 读入是unit8型(0~255)数据
    I1  = im2double(img);    % 把图像转换成double精度类型(0~1)
    I2  = double(img)/255;   % uint8转换成double,作用同im2double

      这里补充说明一下,im2double( )和double( )的区别。double( img)就是简单的数据类型转换,将无符号整型转换为双精度浮点型double,但是数据大小没有变化,原本数据是0~255之间,转化后还是0~255。例如原来是255,那么转换后为255.0,小数位0个数是由double数据长度决定,实际数据大小还是255,只不过这个255已经是double类型空间存储了,再增加不会发生溢出情况。而im2double(img)则不仅仅是将uint8转换到double类型,而且把数据大小从0~255映射到0~1区间。
      另外需要补充说明下面这种情况:

    img = imread('./1.jpg');
    I1  = double(img);
    I2  = im2double(I2); % I2数据依然是0~255,并不是0~1,即I1=I2

      因为I1已经是double类型,imdouble不会对double类型数据0~255映射到区间0~1,所以上面im2double操作没有任何作用,I1和I2相等。
      总结如下:函数im2double将输入转换成double类型。如果输入是uint8、unit16 或者是二值的logical类型,则函数im2double 将其值归一化到0~1之间,当然就是double类型的了。如果输入本身就是double类型,输出还是double类型,并不进行映射。
      如果已经是double类型的数据需要映射,则进行下面操作即可:  

    I2 = I1/255;

    3. matlab图像显示imshow类型问题

      在matlab处理完数据好,我们希望显示或者imwrite写入图片时候,需要注意。如果直接对double之间的数据矩阵I运行imshow(I),我们会发现有时候显示的是一个白色的图像。
      这是因为imshow()显示图像时对double型是认为在0~1范围内,即大于1时都是显示为白色,而imshow显示uint8型时是0~255范围。所以对double类型的图像显示的时候,要么归一化到0~1之间,要么将double类型的0~255数据转为uint8类型。解决方法如下:

    imshow(I/255);    % 将图像矩阵转化到0-1之间
    imshow(I,[]);     % 自动调整数据的范围以便于显示
    inshow(uint8(I)); % 转成uint8

    4. uint和double数据转换的深入说明

      double和uint8、uint16之间数据转换有下面的函数:

    im2double(); % 将图像数组转换成double精度类型
    im2uint8();  % 将图像数组转换成unit8类型 
    im2uint16(); % 将图像数组转换成unit16类型

      当然,当图像数据是double类型的0~1之间,下面两者操作是等价的:

    I1=im2uint8(I); 
    I2=uint8(round(I*255)); 

      但是matlab默认double类型图片数据是位于0~1之间的,而uint8是位于0~255。所以如果矩阵数据图像是double类型(0~1之间)可直接im2uint8,这样不仅完成数据类型转换,而且将0~1之间映射为了0~255之间的数据。
      但是如果图像矩阵数据是double类型的0~255,直接im2uint8转换的话,matlab会将大于1的数据都转换为255,0~1之间的数据才会映射到0~255之间整型的数据。例如下面程序:

    img64 = [1,2,3,4];
    I8    = im2uint8(img64); % I8结果为[255 255 255 255]

    5. mat2gray()和im2double()区别

      这两个如果都是对uint8数据操作,区别就在于前者是归一化操作,归一化后也在0~1之间,自然结果也是double类型,后者是将数据从0~255映射到0~1。例如:

    I  = uint8([1,1,2,3]);
    I1 = mat2gray(I);  % 归一化,I1结果是double型[0,0,0.5,1]
    I2 = im2double(I); % 映射化,I2结果是double型[0.0039,0.0039,0.0078,0.0118]

      可以看出,虽然两者都是一种归一化,im2double只不过最大值永远是常数255,最小值永远是0,如下:

    I0.0255.00.0I−0.0255.0−0.0

      而mat2gray最大值和最小值都是当前矩阵中最大最小的值,如下:
    Imin(I)max(I)min(I)I−min(I)max(I)−min(I)

      另外补充一个函数,mat2str()是将数型转换为字符串类型,一般在批量处理图片,给保存图片格式的名称中有作用,这样就不需要格式化sprintf操作了,非常方便。


    个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

    转载请注明出处:https://blog.csdn.net/fx677588/article/details/53301740

    展开全文
  • 为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。 imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。 因此,matlab读入图像的...
    
    为了节省存储空间,matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像。
    imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。


    因此,matlab读入图像的数据是uint8,而matlab中数值一般采用double型(64位)存储和运算。所以要先将图像转为double格式的才能运算,
    I2=im2double(I1)  %把图像I1转换成double精度类型 (假设图形矩阵范围0~255)
    或者
    I64=double(I8)/255;   %uint转换成double
    如果不转换,计算会产生溢出。
    意思也就是显示的时候用uint8  运算的时候用double
    im2double():将图象数组转换成double精度类型
    im2uint8():将图象数组转换成unit8类型
    im2uint16():将图象数组转换成unit16类型
    展开全文
  • int8_t、int16_t、int32_t、int64_t、uint8_t、uint16_t、uint32_t、uint64_t int_least8_t、int_least16_t、int_least32_t、int_least64_t、uint_least8_t、uint_least16_t、uint_least32_t、uint_least64...

     在vs2017的编译器里,可以直接识别

    int8_t、int16_t、int32_t、int64_t、uint8_t、uint16_t、uint32_t、uint64_t

    int_least8_t、int_least16_t、int_least32_t、int_least64_t、uint_least8_t、uint_least16_t、uint_least32_t、uint_least64_t

    int_fast8_t、int_fast16_t、int_fast32_t、int_fast64_t、uint_fast8_t、uint_fast16_t、uint_fast32_t、uint_fast64_t;

    intmax_t、uintmax_t等。可以看到这些是定义在stdint.h里面的,这里把他摘抄出来,方便低版本编译器对照使用

    typedef signed char        int8_t;
    typedef short              int16_t;
    typedef int                int32_t;
    typedef long long          int64_t;
    typedef unsigned char      uint8_t;
    typedef unsigned short     uint16_t;
    typedef unsigned int       uint32_t;
    typedef unsigned long long uint64_t;
    
    typedef signed char        int_least8_t;
    typedef short              int_least16_t;
    typedef int                int_least32_t;
    typedef long long          int_least64_t;
    typedef unsigned char      uint_least8_t;
    typedef unsigned short     uint_least16_t;
    typedef unsigned int       uint_least32_t;
    typedef unsigned long long uint_least64_t;
    
    typedef signed char        int_fast8_t;
    typedef int                int_fast16_t;
    typedef int                int_fast32_t;
    typedef long long          int_fast64_t;
    typedef unsigned char      uint_fast8_t;
    typedef unsigned int       uint_fast16_t;
    typedef unsigned int       uint_fast32_t;
    typedef unsigned long long uint_fast64_t;
    
    typedef long long          intmax_t;
    typedef unsigned long long uintmax_t;

     

    展开全文
  • 一、C语言基本数据类型回顾 在C语言中有6种基本数据类型:short、int、long、float、double、char 1、数值类型 1)整型:short、int、long 2)浮点型:float、double 2、字符类型:char ...typedef用来定义关键字...

    一、C语言基本数据类型回顾

    在C语言中有6种基本数据类型:short、int、long、float、double、char

    1、数值类型

    1)整型:short、int、long

    2)浮点型:float、double

    2、字符类型:char

    二、typedef回顾

    typedef用来定义关键字或标识符的别名,例如:

    typedef double wages;
    typedef wages salary;

    三、uint8_t\uint_16_t\uint32_t\uint64_t

    1、这些类型的来源:这些数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。

    2、使用这些类型的原因:方便代码的维护。比如,在C中没有bool型,于是在一个软件中,一个程序员使用int,一个程序员使用short,会比较混乱。最好用一个typedef来定义一个统一的bool:

    typedef char bool;

    在涉及到跨平台时,不同的平台会有不同的字长,所以利用预编译和typedef可以方便的维护代码。

    3、这些类型的定义:
    在C99标准中定义了这些数据类型,具体定义在:/usr/include/stdint.h    ISO C99: 7.18 Integer types

    #ifndef __int8_t_defined  
    # define __int8_t_defined  
    typedef signed char             int8_t;   
    typedef short int               int16_t;  
    typedef int                     int32_t;  
    # if __WORDSIZE == 64  
    typedef long int                int64_t;  
    # else  
    __extension__  
    typedef long long int           int64_t;  
    # endif  
    #endif  
     
     
    typedef unsigned char           uint8_t;  
    typedef unsigned short int      uint16_t;  
    #ifndef __uint32_t_defined  
    typedef unsigned int            uint32_t;  
    # define __uint32_t_defined  
    #endif  
    #if __WORDSIZE == 64  
    typedef unsigned long int       uint64_t;  
    #else  
    __extension__  
    typedef unsigned long long int  uint64_t;  
    #endif  

    4、格式化输出:

    uint16_t %hu
    uint32_t %u
    uint64_t %llu

    5、uint8_t类型的输出:

    注意uint8_t的定义为

    typedef unsigned char           uint8_t;

    uint8_t实际上是一个char。所以输出uint8_t类型的变量实际上输出其对应的字符,而不是数值。例:

    uint8_t num = 67;
    cout << num << endl;

    输出结果:C

    参考:

    http://blog.sina.com.cn/s/blog_9dcc0fb90101gdvo.html

    http://blog.csdn.net/mrlixirong/article/details/48416533

    http://blog.csdn.net/kiddy19850221/article/details/6655066

     
    ---------------------  
    作者:海阔天空sky1992  
    来源:CSDN  
    原文:https://blog.csdn.net/Mary19920410/article/details/71518130  
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • c++基础之uint8_t

    2018-10-02 17:08:22
    C++的基础数据类型: 名称 字节长度 取值范围 bool 1 false,true char 1 -128~127 signed char 1 -128~127 unsigned char 1 0~255 short(signed short) 2 -215 ~ 215 - 1 ...int (signed in...
  •  uint8 head; //5月4号修改uint8变为u8  uint8 dev_id[4];//适配器ID  uint8 my_id[2]; //子设备ID  uint8 handle; //报文上一跳  uint8 ctrl;  uint8 data; //上电后广播的是自己的设备可
  • uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种...
  • 在嵌入式编程中经常遇到用uint8_t、uint16_t、uint32_t、uint_fast16_t之类的关键字定义一些整型变量,但是具体表示什么意思,并不是太清楚,只是把它当成int之类的整型变量定义关键字。在自己理解他们之前,先写...
  • uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据类型...
  • 我想,uint8、uint16、uint32、uint64 这大家可能比较理解unit,unsigned int 嘛 uint8,我想很多人也能够理解,其实是unsigned char 那么 _t 呢?其实就是 typedef 的意思 我们在学习标准的C语言时,常见的有 ...
  • 简单来说,uint8_t / uint16_t / uint32_t /uint64_t这些数据类型都只是别名而来,具体如下: 一、C语言数据基本类型 在C语言中有6种基本数据类型:short、int、long、float、double、char 1)整型:short int、...
  • uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型? 在nesc的代码中,你会看到很多你不认识的数据类型,比如uint8_t等。咋一看,好像是个新的数据类型,不过C语言(nesc是C的扩展)里面好像没有这种数据...
  • 文章目录目录uint8_t\uint_16_t\uint32_t\uint64_t格式化输出 uint8_t\uint_16_t\uint32_t\uint64_t 在 C99 标准(ISO C99: 7.18 Integer types)的 stdint.h 头文件中通过 typedef 定义了这些数据类型: #ifndef __...
  • 数字图像处理深入思考(一)double型的图像矩阵转化为uint8(I)类型(二)图像的【0,1】和【0,255】显示 深入思考 (一)double型的图像矩阵转化为uint8(I)类型 为了节省存储空间,matlab为图像提供了特殊的数据...
  • 简单说明uint8与byte可以说是一样的,因为文档中有这样的定义:The Go Programming Language Specification Numeric types uint8 the set of all unsigned 8-bit integers (0 to 255) byte alias for uint8 也就是说...
  • 在嵌入式编程中经常遇到用uint8_t、uint16_t、uint32_t、uint_fast16_t之类的关键字定义一些整型变量,但是具体表示什么意思,并不是太清楚,只是把它当成int之类的整型变量定义关键字。在自己理解他们之前,先写...
  • JS的类型数组,从其构造函数名称,基本上都可以望文生义,看名字就知道怎么回事。...但是有一个例外 Uint8ClampedArray ,它与 Uint8Array 颇为相似,但又有所区别。 本文详细介绍这两者之间的差异,并举例说明。
  • matlab为图像提供了特殊的数据类型uint8(8位无符号整数),以此方式存储的图像称作8位图像,可以节省存储空间。 imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中。 matlab读入图像...
  • C++的基础数据类型: C++的主要数据类型,主要分为三类:布尔型,整型(char型从本质上说,...即我们所看到的 uint8_t、uint16_t、uint32_t都不是新的数据类型,而是通过typedef给类型起得别名。 uint8_t / uint...
1 2 3 4 5 ... 20
收藏数 349,525
精华内容 139,810
关键字:

uint8