opencv——マットオブジェクトの深さ(CV_8UC3、CV_32Fなど)

マットオブジェクトコンポジション

class CV_EXPORTS Mat
{
    
    
public/*..很多方法..*/
/*............*/
 
int flags;/*flags指定图像的颜色空间  
            flags > 0 3通道的彩色图像
            flags = 0 灰度图像
            flags < 0 不作改变
          */
int dims;  /*数据的维数*/
int rows,cols; /*行和列的数量;数组超过2维时为(-1,-1)*/
uchar *data;   /*指向数据*/
int * refcount;   /*指针的引用计数器; 阵列指向用户分配的数据时,指针为 NULL
/* 其他成员 */ 
...
};

マットよく使うメンバー

  • 1.マトリックスデータを格納するメモリ(uchar *データ)へのデータMatオブジェクト内のポインタ

  • 2. dims行列の次元、34行列の次元は2次元、34 * 5行列の次元は3次元です

  • 3.チャネルマトリックスチャネル、マトリックス内の各マトリックス要素が持つ値の数、たとえば、3 * 4マトリックスには12個の
    要素があります。各要素に3つの値がある場合、マトリックスは次のように言われます。 3つのチャネルがあります。つまり、チャネル= 3です。カラー画像には、赤、緑、青の3つのチャネルがあるのが一般的です。

  • 4.深度深度、つまりピクセルあたりのビット数、つまりチャネルあたりのビット数。
    あなたは何のOpenCVのMat.depth()で取得することは、異なるビットを表す、0から6までの数である:
    列挙
    {CV_8U = 0、CV_8S = 1、CV_16U = 2、CV_16S = 3、CV_32S = 4、CV_32F = 5、CV_64F = 6}、

0と1は両方とも8ビットを表し、2と3は両方とも16ビットを表し、4と5は32ビットを表し、6は64ビットを表すことがわかります。

bit_depth

ビット数— 8ビット、16ビット、32ビット、64ビットを表します。

CV_8 | 32 | 64

グレースケール画像を格納するMatオブジェクトを作成する場合、この画像のサイズは幅100、高さ100です。

したがって、このグレースケール画像には10,000ピクセルがあり、メモリ空間の各ピクセルが占める空間は8ビット、8ビットです。つまり、CV_8に対応します。

同様に、CV_32は、各ピクセルが32ビットを占めることを意味します

S | U | F

  • S-は-signedint-signedintegerの略です

  • U-は-unsignedint-unsignedintegerの略です

  • F--表す--float ---------単精度浮動小数点

C

画像のチャンネル数

  • チャネル= 1:グレースケール画像–grayImg—はい—単一チャネル画像

  • チャネル= 3:RGBカラー画像---------はい–3チャネル画像

  • チャネル= 4:Alphチャネルを使用したRGB画像-はい-4チャネル画像

例:
CV_8UC3
は、8ビットの符号なし3チャネル画像です。

C番号が書き込まれていない場合、デフォルトは単一チャネルです。たとえば
、CV_8U = CV_8uC1

マットオブジェクトの作成方法

  • Mat(int rows、int cols、int _type);
  • Mat(サイズsize、int _type);

imshowは画像のマッピングを示しています

  • ロードされた画像が8ビット符号なしの場合、元の画像が表示されます。

  • 画像が16ビット符号なしタイプ(16ビット符号なし)または32ビット整数(32ビット整数、符号付きビット)の場合は、ピクセル値を256で除算します。言い換えると、値の範囲は[0,255 x256]が[0,255]にマップされます。

  • 画像が32ビット浮動小数点または64ビット浮動小数点の場合、ピクセル値に255を掛ける必要があります。つまり、値の範囲は[0,1]が[0,255]にマップされます。

私の理解:
これらは画像データの保存方法です。imshowを使用して表示する場合、デフォルトはCV_8表示であるため、マッピングする必要があります。元の16ビットデータは8ビットで表示されるため、画像の豊かさが失われます。(これが、Macの画像管理がWindowsの画像管理よりも優れている理由です)

8ビットは0〜255です。16ビットは、2つの8ビットが相互に接続されていることを意味します。つまり、8ビットの8ビットデータがあります。

フロートはメモリ内で4バイト、つまり32ビットを占有します

たとえば、CV_8UのグレースケールまたはBGR画像のカラーコンポーネントは0〜255の間です。直接imshowは画像を表示できます。CV_32FまたはCV_64Fの値の範囲は0〜1.0です。imshowの場合、画像は255倍されてから表示されます。

おすすめ

転載: blog.csdn.net/qq_28258885/article/details/112563298