OpenCV および関連メソッドの CvType のさまざまなパラメーターの意味を理解する

WBOY
リリース: 2023-04-14 13:13:03
転載
1642 人が閲覧しました

1. はじめに

この記事は Java 環境に基づいており、OpenCV 4.6.0v で Mat オブジェクトを作成するときに渡される CvType パラメーターを紹介します。

CvType.CV_8UCX、CvType.CV_8SCX、CvType.CV_16UCX、CvType.CV_16SCX、およびその他の

パラメーターの役割と意味がよく理解できない場合。

したがって、この記事は、OpenCV Mat におけるチャネルの役割を理解するのに役立ちます。

次のコンテンツは OpenCV SDK 4.6.0v

2 に基づいています。CvType

この型は主に Mat のデータ型を定義するために使用されます。一般的な使用シナリオは、マットの作成時に定義することです。

それでは、CvType タイプではどのようなパラメーターが定義されているのでしょうか?非常に簡単に言うと、Mat 内の画像データの 2 つの基本インジケーターを決定します。

  1. チャネル: つまり、mat.channels() によって返される値は 3 つのパラメーター 1 ~ 4 のみです。
  2. Depth 深さ: つまり、マット内の各ピクセル パラメーターの格納値の範囲です。値は各チャネルの byte[] 配列に格納され、各配列の値の範囲は深さによって決まります。

チャネルの概念については、以前の記事 https://zinyan.com/?p=493 で紹介しました。チャネルの概念についてよくわからない場合は、前の記事を読んでください。

2.1 深さ-深さ

CvType ソース コードから、OpenCV が 8 つの深さパラメーターを定義していることがわかります。

public static final int
 CV_8U = 0,
 CV_8S = 1,
 CV_16U = 2,
 CV_16S = 3,
 CV_32S = 4,
 CV_32F = 5,
 CV_64F = 6,
 CV_16F = 7;
ログイン後にコピー

上記の名前の 8U、8S、16U、16S、32S、64F、16F などの前の数字はビット数を表します

つまり、8bite、 16バイト、32バイト、64バイト。値の範囲を定義するために使用され、次の文字 U、S、F は記号と精度を表します。

  • U: 符号なし整数、符号なし整数、正の整数も
  • #S: 符号付き整数、符号付き整数 (負と正の数を含む、すべての整数)
  • # F:float、単精度浮動小数点型、つまり小数点付き。 (追記: Float 型自体は負の数をサポートしています)

したがって、次の定義を組み合わせることで理解できます:

# #CV_8U : パラメータの値の範囲 0 ~ 255 を表す 8 ビットの正の整数です。

    CV_8S: パラメータの値の範囲 -128 を表す 8 ビットの正および負の数です。 ~127
  • CV_16U : パラメータの値の範囲を表す 16 ビットの正の整数です。 0~65535
  • CV_16S: パラメータの値の範囲を表す 16 ビットの正および負の数値です。パラメータの値の範囲 -32768 ~ 32767
  • CV_16F : パラメータの値の範囲を表す 16 ビット浮動小数点数です -65504 ~ 65504
  • CV_32S: 32 です- パラメーターの値の範囲を表すビット正の整数 2147483648~2147483647
  • CV_32F: パラメーター値の範囲 1.18x10^-38^~3.40x10^38^ を表す 32 ビット浮動小数点数です。
  • CV_64F: これは 64 ビット浮動小数点数で、パラメーター値の範囲 2.23x10^- 308^~1.79x10^308^
  • PS: について浮動小数点数の精度と範囲の問題については、検索して詳細を確認できます。上記のパラメータ範囲は、ネットワーク サマリーを通じて取得されます。

2.2 チャネル

OpenCV 定義では、チャネルの最大数は 4 で、最小は 1 です。これはコードに反映されており、これはコードで定義されている C1、C2 です。 CvType クラス。C3、C4。

C1: シングル チャネルを表します

    C2: デュアル チャネルを表します
  • C3: ティーから
  • C4: 4 つのチャネルを表します
  • OpenCV では、ピクセルのカラー値は double[] 倍精度浮動小数点配列に格納されます。
チャネルは、この double[] 配列の長さを定義します。

たとえば、画像が RGB 形式のカラー画像の場合、画像内のピクセルを R、G、B の 3 つの値と混合して決定する必要があります。特定の色。

ピクセルの下の R、G、B の値を記録するには、double[3] の配列が必要です。

つまり、この図では C3 の 3 つのチャンネルが使用されています。

また、RGB は通常、0 ~ 255 の範囲の整数です。

OpenCV は、上で紹介した深度を使用して色の値の範囲を表します。

この 2 つの組み合わせは次のとおりです:

CvType.CV_8UC3: 3 つのチャネルを表します。各チャネルのパラメータの値の範囲は 8 ビットの正の整数です。これは 0 ~255

最後に、Matt が作成されたときのパラメータを組み合わせて理解します。

//zinyan:创建了一个4*4尺寸的图片。每个像素点存储了一个double[1]的数组,该数组中值的范围为0~255
Mat mat = new Mat(4, 4, CvType.CV_8UC1); //通常用来表示灰度图或黑白图

//zinyan:创建了一个5*5尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~255
Mat mat1 = new Mat(5, 5, CvType.CV_8UC3); //通常用来表示彩色图

//zinyan:创建了一个6*6尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~65535
Mat mat1 = new Mat(6, 6, CvType.CV_16UC3); //通常用来表示彩色图,颜色值范围更广。
ログイン後にコピー

To要約すると、CvType 定義されているのは、Mat 内のデータ ストレージのタイプです。

は、Mat が保存するピクセル値の数と各ピクセル値の範囲を定義します。

Mat のさまざまなアルゴリズムが各ピクセルの値を処理するためです。数値を処理して計算を実行するには、各数値の値の範囲をアルゴリズムに伝える必要があります。

3. その他

外部からマットを渡された場合。 Mat チャンネルの数と各値の値の範囲はどのように決定すればよいでしょうか?

CvType は、型 type を通じて対応する型値に変換できる関連クエリ メソッドを提供します。

例は次のとおりです。

Mat mat = new Mat(4, 4, CvType.CV_8UC3);
int depth = CvType.depth(mat.type()); //输出结果值为 0 == CvType.CV_8U

Mat mat1 = new Mat(4, 4, CvType.CV_16SC1);
depth = CvType.depth(mat1.type()); //输出结果值为 3 == CvType.CV_16S
ログイン後にコピー

さらに、クエリを実行することもできます。チャンネル数。

うわー

3.1 非推奨の CV_USRTYPE1

CvType.CV_USRTYPE1 の値はすでに CV_16F と同等です。したがって、このパラメータにも @deprecated アノテーションが付けられます。放棄されたことを表します

使用しないことをお勧めします。

3.2 ELEM_SIZE メソッド

CvType の他のメソッドは比較的理解しやすいです。最後に、public static Final int ELEM_SIZE(int type) メソッドがあります。

このメソッドは、型の値を渡します。これは、いわゆる CvType.CV_8UC1 およびその他のパラメーター値です。

この場合、返されるのは int 変数です。

このメソッドによって返される変数は、各チャネルのパラメータのバイト数を表します。 1 バイトは 8 ビットを表し、8 ビットです。

したがって、CV_8U、CV_8S の場合は、チャネル番号を直接返すだけです。

16 ビット データの場合は 2* チャネル、32 ビット データの場合は 4* チャネル、64 ビット データの場合は 8* チャネルを返す必要があります。

4. 概要

これで、OpenCV の CvType の紹介は終わりです。

使用中に Cv​​Type に関するエラーが発生した場合。したがって、ほとんどの場合、CvType に慣れていないことが原因です。

または、チャネルと深度の要件を持つアルゴリズムがエラーを引き起こすために使用されます。

以上がOpenCV および関連メソッドの CvType のさまざまなパラメーターの意味を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート