opencv02-画像のロード、表示、変更、保存

opencv01-画像のロード、表示、変更、保存

画像の読み込み

メソッド定義:

// filename 要加载的文件名
// flags 标识,参考cv::ImreadModes
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );

方法の説明:

  1. 指定されたファイルから画像をロードして戻ります
  2. ファイルを読み取れない場合(ファイルが存在しない、適切な権限がない、または無効なファイル形式であるため)、空の行列、つまり Mat::data==NULL を返します。
  3. サポートされているファイル形式は数多くあります: ビットマップ、JPEG、TIFF、png

予防:

  1. このメソッドは、ファイル拡張子ではなく画像の種類を決定します。

  2. カラー画像の場合、デコード後に保存される画像のチャネル順序は次のようになります。BGR

  3. IMREAD_GRAYSCALE を使用する場合、利用可能な場合はコーデックの内部グレースケール変換が使用されます。

  4. 結果は cvtColor() とは異なる場合があります

  5. Windows システムおよび MacOSX では、OpenCV イメージに付属のコーデック (libjpeg、libpng、libtiff、および libjasper) がデフォルトで使用されます。したがって、OpenCV は常に JPEG、PNG、TIFF を読み取ることができます。MacOSX では、ネイティブ MacOSX イメージ リーダーを使用するオプションもあります。ただし、現在、これらのネイティブ イメージ ローダーは、MacOSX に組み込まれたカラー マネージメントにより、異なるピクセル値を持つイメージを提供することに注意してください。

  6. Linux、BSD フレーバー、その他の Unix に似たオープン ソース オペレーティング システムでは、OpenCV は、関連するパッケージ (開発ファイルを忘れないでください。たとえば、Debian の場合は「libjpeg-dev」) をインストールすることにより、オペレーティング システムのミラーによって提供されるコーデックを探します。または Ubuntu システム)コーデックのサポートを取得するか、CMake でOPENCV_BUILD_3RDPARTY_LIBSフラグ

  7. この場合、CMake で true に設定しWITH_GDAL、画像設定をロードしますIMREAD_LOAD_GDAL。その後、画像をデコードするために、[Raster] および [Vector] 形式をサポートする [GDAL] ドライバーが使用されます。

  8. EXIF情報が画像に埋め込まれている場合、フラグが設定されるパラメータが渡さEXIFれない限り画像は回転するため、画像の向きも考慮されます。IMREAD_IGNORE_ORIENTATIONIMREAD_UNCHANGED

  9. フラグ ビットを使用して、IMREAD_UNCHANGEDイメージ値を浮動小数点型として PFM 形式に保持します。

  10. デフォルトでは、画像のピクセルは 2^30 未満である必要があり、この制限はOPENCV_IO_MAX_IMAGE_PIXELSシステム変数を通じて設定できます。

フラグの識別:

enum ImreadModes {
    
    
       IMREAD_UNCHANGED            = -1, //按原样加载图片(with alpha channel, otherwise it gets cropped). 忽略EXIF orientation.
       IMREAD_GRAYSCALE            = 0,  //总是转换图片为单通道的grayscale图片(codec 内转换).
       IMREAD_COLOR                = 1,  //总是转换图片为3通道的BGR彩色图片, 默认值
       IMREAD_ANYDEPTH             = 2,  //!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
       IMREAD_ANYCOLOR             = 4,  //如果设置了,那么以任意可能的颜色格式读取图片
       IMREAD_LOAD_GDAL            = 8,  //如果设置了,那么使用gdal驱动加载图片
       IMREAD_REDUCED_GRAYSCALE_2  = 16, //总是转换图片为单通道的grayscale图片,图片size减少为1/2
       IMREAD_REDUCED_COLOR_2      = 17, //总是转换图片为3通道的BGR彩色图片,图片size减少为1/2
       IMREAD_REDUCED_GRAYSCALE_4  = 32, //总是转换图片为单通道的grayscale图片,图片size减少为1/4
       IMREAD_REDUCED_COLOR_4      = 33, //总是转换图片为3通道的BGR彩色图片,图片size减少为1/4
       IMREAD_REDUCED_GRAYSCALE_8  = 64, //总是转换图片为单通道的grayscale图片,图片size减少为1/8
       IMREAD_REDUCED_COLOR_8      = 65, // 总是转换图片为3通道的BGR彩色图片,图片size减少为1/8
       IMREAD_IGNORE_ORIENTATION   = 128 //不根据EXIF's orientation flag来旋转图片
     };

ウィンドウと画像表示を作成する

メソッド定義:

// filename window的标题,可以用来作为window的标识符
// flags window的标识,The supported flags are: (cv::WindowFlags)
CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

方法の説明:

  1. 画像やトラックバーのプレースホルダーとして使用できるウィンドウを作成する
  2. 同じ名前のウィンドウがすでに存在する場合、このメソッドは何も行いません。
  3. cv::destroyWindowまたはを使用しcv::destroyAllWindowsてすべてのウィンドウを閉じ、関連するメモリの割り当てを解除できます。単純なプログラムの場合、オペレーティング システムが終了するとすべてのリソースとアプリケーションが自動的に閉じられるため、これらの関数を明示的に呼び出す必要はありません。

予防:

  1. Qt でサポートされる追加のフラグ
  • WINDOW_NORMAL or WINDOW_AUTOSIZE:WINDOW_NORMAL ではウィンドウのサイズを変更できますが、WINDOW_AUTOSIZE では表示される画像のサイズに合わせてウィンドウのサイズが自動的に調整され、手動でウィンドウのサイズを調整することはできません
  • WINDOW_FREERATIO or WINDOW_KEEPRATIO:WINDOW_FREERATIO は比率に関係なく画像のサイズを調整しますが、WINDOW_KEEPRATIO は画像の比率を維持します
  • WINDOW_GUI_NORMAL or WINDOW_GUI_EXPANDED:WINDOW_GUI_NORMAL はステータスバーとツールバーなしでウィンドウを描画する古い方法ですが、WINDOW_GUI_EXPANDED は新しく拡張された GUI です
  1. デフォルトでは、フラグ == WINDOW_AUTOSIZE | WINDOW_KEEPRATIO | WINDOW_GUI_EXPANDED

フラグの識別:

enum WindowFlags {
    
    
       WINDOW_NORMAL     = 0x00000000, //可以调整窗口大小
       WINDOW_AUTOSIZE   = 0x00000001, //不能调整窗口大小
       WINDOW_OPENGL     = 0x00001000, //opengl 支持的窗口,需要编译opencv的时候支持opengl

       WINDOW_FULLSCREEN = 1,          //!< change the window to fullscreen.
       WINDOW_FREERATIO  = 0x00000100, //!< the image expends as much as it can (no ratio constraint).
       WINDOW_KEEPRATIO  = 0x00000000, //!< the ratio of the image is respected.
       WINDOW_GUI_EXPANDED=0x00000000, //!< status bar and tool bar
       WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way
    };

メソッド定義:

// winname window的标识符
// mat 要显示的图片
CV_EXPORTS_W void imshow(const String& winname, InputArray mat);

方法の説明:

  1. この関数は、指定されたウィンドウに画像を表示します。ウィンドウが cv::WINDOW_AUTOSIZE を使用して作成されている場合、画像は元のサイズで表示されますが、それでも画面の解像度によって制限されます。それ以外の場合、画像はウィンドウのサイズに適合します。この関数は、画像の深度に応じて画像を拡大縮小します。
  • 画像が8ビット符号なしの場合はそのまま表示されます
  • 画像が 16 ビット符号なしの場合、ピクセルは 256 で除算されます。つまり、値範囲 [0,255*256] は [0,255] にマッピングされます。
  • 画像が 32 ビットまたは 64 ビット浮動小数点の場合、ピクセル値は 255 倍されます。つまり、値範囲 [0,1] が [0,255] にマッピングされます。
  • 必要な変換があいまいなため、32 ビット整数イメージは処理されなくなります
  • 画像のコンテキストに固有のカスタム前処理を使用して、8 ビットの符号なし行列を変換します。
  • OpenGL でサポートされているウィンドウが作成された場合、 cv::imshow は ogl::Buffer 、 ogl::Texture2D 、および cuda::GpuMat も入力としてサポートします
  • この関数呼び出しの前にウィンドウが作成されていない場合は、 cv::WINDOW_AUTOSIZE ウィンドウが作成されます。
  • 画面解像度を超える画像を表示したい場合は、imshow の前にnamedWindow("", WINDOW_NORMAL) を呼び出す必要があります。

予防:

  1. この関数の直後に または を呼び出してcv::waitKeycv::pollKeyGUI のハウスキーピング タスクを実行する必要があります。
    これは通常、指定された画像を表示し、ウィンドウがマウスとキーボードのイベントを待機するために非常に必要です。そうしないと、画像が表示されず、ウィンドウがロックされる可能性があります。
    例:waitKey(0)ウィンドウは、いずれかのキーが押されるまで無限に表示され (画像表示に適しています)、waitKey(25)フレームを表示し、約 25 ミリ秒待機します (フレームごとの表示ビデオ ストリームに適しています)。 cv::destroyWindow を呼び出します。ウィンドウを削除します。
  2. [ Windows バックエンドのみ] Ctrl+C 画像をクリップボードにコピーします。
  3. [ Windows バックエンドのみ] Ctrl+S を押すと、画像を保存するためのダイアログ ボックスが表示されます。
#include <iostream>
#include <opencv2/highgui/highgui.hpp>


using namespace std;
using namespace cv;

/**
 * 图像的加载,修改图像和保存图像
 *
 * @return
 */
int main() {
    
    
    string filename= "D:/workspace/cpp_workspace/my-cv/data/img/lena.jpg";
    Mat img = imread(filename, ImreadModes::IMREAD_COLOR);
    if (img.data == nullptr) {
    
    
        cout << "can not load image" << endl;
        return -1;
    }

    //cout << img << endl;

    namedWindow("test", WINDOW_AUTOSIZE);
    imshow("test", img);
    waitKey();
    return 0;
}

画像の修正

メソッド定義:

//将图像从一个色彩空间转换为另一个色彩空间
// @param src 输入图像:8 位无符号、16 位无符号 ( CV_16UC...) 或单精度浮点数。
// @param dst 与SRC大小和深度相同的输出图像。
// @param code 代码颜色空间转换代码(请参阅 #ColorConversionCodes)。
// @param dstCn 目标图像中的dstCn通道数;如果参数为 0,则通道是从 SRC 和代码自动推导出来
// 可以参考:imgproc_color_conversions
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );

方法の説明:

  1. この関数は、入力画像をある色空間から別の色空間に変換します。RGB 色空間からの変換の場合、チャネルの順序を明示的に指定する必要があります (RGB または BGR、注: OpenCV のデフォルトの色形式は通常 RGB と呼ばれますが、実際には BGR (バイト反転) です。標準 (24 ビット) カラー画像の最初のバイトは 8 ビットの青コンポーネント、2 番目のバイトは緑、3 番目のバイトは赤になります。4 番目、5 番目、そして 6 番目のバイトは、 2 番目のピクセル (青、緑、赤) などになります。R
    、G、B チャネル値の通常の範囲は次のとおりです。
  • 0 ~ 255 は CV_8U 画像を意味します
  • 0 ~ 65535 は CV_16U 画像を意味します
  • CV_32F イメージの場合は 0 ~ 1。
    線形変換の場合、範囲は重要ではありません。ただし、非線形の場合に変換する場合は、正しい値の結果を得るために、入力 RGB 画像を適切な値の範囲に正規化する必要があります。たとえば、32 ビット浮動小数点画像を直接持っている場合は、RGB -> Luv 変換します。 8 ビットから 画像がスケーリングなしで変換される場合、関数が想定している値の範囲は 0 ~ 1 ではなく、0 ~ 255 になります。したがって、cvtColor呼び出す前に画像を拡大縮小する必要があります。
img *= 1./255;
cvtColor(img, img, COLOR_BGR2Luv);
  1. 8 ビット画像で #cvtColor を使用すると、変換で一部の情報が失われます。多くのアプリケーションではこれは目立ちませんが、アプリケーションでは 32 ビット画像を使用することをお勧めします。操作前にイメージを変換し、操作後に元に戻します。

  2. 変換によりアルファ チャネルが追加される場合、その値は対応するチャネルの最大値に設定されます。範囲: CV_8U は 255、CV_16U は 65535、CV_32F は 1

コード例:

#include <opencv2/opencv.hpp>
int main() {
    
    
    string filename = "D:/workspace/cpp_workspace/my-cv/data/img/lena.jpg";
    Mat srcImage = imread(filename, ImreadModes::IMREAD_COLOR);
    Mat dstImage;
    cvtColor(srcImage, dstImage, COLOR_BGR2Lab);
    imshow("原图", srcImage);
    imshow("效果图", dstImage);

    waitKey(0);
    return 0;
}

画像保存

メソッド定義:

// 保存图片到指定的文件
// img 待保存的图片(一个或多个)(Mat or vector of Mat)
// params 用来设置对应图片格式的参数的,因为一般情况下这些图片格式都是经过了压缩的,这里就是设置这些压缩参数来控制图片的质量。该参数是一个vector<int>类型,里面分别存入paramId_1, paramValue_1, paramId_2, paramValue_2, ... 也就是说存入一对属性值。如果不设置该参数的话,则程序会自动根据所保存的图像格式采用一个默认的参数。参考: cv::ImwriteFlags
CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
              const std::vector<int>& params = std::vector<int>());

方法の説明:

  1. この機能は、imwrite画像を指定したファイルに保存します。画像の形式はファイル拡張子に基づきます (拡張子のリストを表示できます)。通常、この関数で保存できるのは、8 ビットの符号なしシングル チャネル ピクチャ (CV_8U) または 3 チャネル ピクチャ (「BGR」チャネル順) のみです。例外もあります。

    • OpenEXR エンコーダでは、32 ビット浮動小数点 (CV_32F) 画像のみを保存でき、サポートされていません (CV_8U)

    • Radiance HDR エンコーダーを使用すると、非 64 ビット浮動小数点 (CV_64F) 画像を保存でき、すべての画像は 32 ビット浮動小数点 (CV_32F) に変換されます。

    • 8 ビット符号なし (CV_8U) および 16 ビット符号なし (CV_16U) イメージは、JPEG 2000 エンコーダを使用して保存できます。

    • PAM エンコーダを使用すると、8 ビット符号なし (CV_8U) および 16 ビット符号なし (CV_16U) の画像を保存できます。

    • PNG エンコーダを使用すると、8 ビット符号なし (CV_8U) および 16 ビット符号なし (CV_16U) イメージを保存でき、この機能を使用してアルファ チャネル付きの PNG イメージを保存できます。これを行うには、

      • 最後にアルファ チャネルを備えた 8 ビット (または 16 ビット) 4 チャネル画像 BGRA。完全に透明なピクセル
      • 2 アルファは 0 に設定する必要があり、完全に不透明なピクセルのアルファは 255/65535 に設定する必要があります (以下のコード サンプルを参照)。
    • 8 ビット符号なし (CV_8U) および 16 ビット符号なし (CV_16U) イメージは、PGM/PPM エンコーダを使用して保存できます。

    • 7 TIFF エンコーダを使用すると、8 ビット符号なし (CV_8U)、16 ビット符号なし (CV_16U)、32 ビット浮動小数点 (CV_32F) および 64 ビット浮動小数点 (CV_64F) 画像を保存できます。複数の画像 (マットのベクトル) を TIFF 形式で保存できます (以下のコード例を参照)。LogLuv ハイ ダイナミック レンジ (ピクセルあたり 4 バイト) でエンコードされた 32 ビット浮動小数点 3 チャンネル (CV_32FC3) TIFF 画像を保存します。

  2. 画像形式がサポートされていない場合、画像は 8 ビット符号なし (CV_8U) に変換され、その方法で保存されます。

  3. フォーマット、深度、チャンネル順序が異なる場合は、保存する前に変換Mat::convertToして使用してくださいcv::cvtColorまたは、一般的なファイル ストレージ I/O 関数を使用して、画像を XML または YAML 形式で保存します。

  4. 以下の例は、BGRA 画像を作成し、カスタム圧縮パラメータを設定して、PNG ファイルに保存する方法を示しています。また、複数の画像を TIFF ファイルに保存する方法も示します。
    @include snippets/imgcodecs_imwrite.cpp

enum ImwriteFlags {
    
    
       IMWRITE_JPEG_QUALITY        = 1,  //!< For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95.
       IMWRITE_JPEG_PROGRESSIVE    = 2,  //!< Enable JPEG features, 0 or 1, default is False.
       IMWRITE_JPEG_OPTIMIZE       = 3,  //!< Enable JPEG features, 0 or 1, default is False.
       IMWRITE_JPEG_RST_INTERVAL   = 4,  //!< JPEG restart interval, 0 - 65535, default is 0 - no restart.
       IMWRITE_JPEG_LUMA_QUALITY   = 5,  //!< Separate luma quality level, 0 - 100, default is -1 - don't use.
       IMWRITE_JPEG_CHROMA_QUALITY = 6,  //!< Separate chroma quality level, 0 - 100, default is -1 - don't use.
       IMWRITE_JPEG_SAMPLING_FACTOR = 7, //!< For JPEG, set sampling factor. See cv::ImwriteJPEGSamplingFactorParams.
       IMWRITE_PNG_COMPRESSION     = 16, // 针对PNG的压缩等级,值0 to 9,值越大,压缩之后图片越小,更长的压缩时间。如果指定了该参数,IMWRITE_PNG_STRATEGY应该修改为IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY),默认为1(最好的速度设置).
       IMWRITE_PNG_STRATEGY        = 17, //默认值为:IMWRITE_PNG_STRATEGY_RLE.
       IMWRITE_PNG_BILEVEL         = 18, //!< Binary level PNG, 0 or 1, default is 0.
       IMWRITE_PXM_BINARY          = 32, //!< For PPM, PGM, or PBM, it can be a binary format flag, 0 or 1. Default value is 1.
       IMWRITE_EXR_TYPE            = (3 << 4) + 0, /* 48 */ //!< override EXR storage type (FLOAT (FP32) is default)
       IMWRITE_EXR_COMPRESSION     = (3 << 4) + 1, /* 49 */ //!< override EXR compression type (ZIP_COMPRESSION = 3 is default)
       IMWRITE_EXR_DWA_COMPRESSION_LEVEL = (3 << 4) + 2, /* 50 */ //!< override EXR DWA compression level (45 is default)
       IMWRITE_WEBP_QUALITY        = 64, //!< For WEBP, it can be a quality from 1 to 100 (the higher is the better). By default (without any parameter) and for quality above 100 the lossless compression is used.
       IMWRITE_HDR_COMPRESSION     = (5 << 4) + 0, /* 80 */ //!< specify HDR compression
       IMWRITE_PAM_TUPLETYPE       = 128,//!< For PAM, sets the TUPLETYPE field to the corresponding string value that is defined for the format
       IMWRITE_TIFF_RESUNIT        = 256,//!< For TIFF, use to specify which DPI resolution unit to set; see libtiff documentation for valid values
       IMWRITE_TIFF_XDPI           = 257,//!< For TIFF, use to specify the X direction DPI
       IMWRITE_TIFF_YDPI           = 258,//!< For TIFF, use to specify the Y direction DPI
       IMWRITE_TIFF_COMPRESSION    = 259,//!< For TIFF, use to specify the image compression scheme. See libtiff for integer constants corresponding to compression formats. Note, for images whose depth is CV_32F, only libtiff's SGILOG compression scheme is used. For other supported depths, the compression scheme can be specified by this flag; LZW compression is the default.
       IMWRITE_JPEG2000_COMPRESSION_X1000 = 272,//!< For JPEG2000, use to specify the target compression rate (multiplied by 1000). The value can be from 0 to 1000. Default is 1000.
       IMWRITE_AVIF_QUALITY        = 512,//!< For AVIF, it can be a quality between 0 and 100 (the higher the better). Default is 95.
       IMWRITE_AVIF_DEPTH          = 513,//!< For AVIF, it can be 8, 10 or 12. If >8, it is stored/read as CV_32F. Default is 8.
       IMWRITE_AVIF_SPEED          = 514 //!< For AVIF, it is between 0 (slowest) and (fastest). Default is 9.
     };

ImwritePNGFlags、PNG 画像形式パラメータ:

//1. Imwrite 用于调整压缩算法的 PNG 特定标志。这些标志将修改 PNG 图像压缩的方式,并将传递到底层 zlib 处理阶段。
//2. IMWRITE_PNG_STRATEGY_FILTERED的效果是强制更多的霍夫曼编码和更少的字符串匹配;它介于IMWRITE_PNG_STRATEGY_DEFAULT和IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY之间。
//3. IMWRITE_PNG_STRATEGY_RLE 设计为几乎与 IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY 一样快,但为 PNG 图像数据提供更好的压缩。策略参数仅影响压缩比,而不影响压缩输出的正确性,即使设置不当也是如此。
//4. IMWRITE_PNG_STRATEGY_FIXED防止使用动态霍夫曼代码,允许为特殊应用提供更简单的解码器。
enum ImwritePNGFlags {
    
    
       IMWRITE_PNG_STRATEGY_DEFAULT      = 0, //!< Use this value for normal data.
       IMWRITE_PNG_STRATEGY_FILTERED     = 1, //!< Use this value for data produced by a filter (or predictor).Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better.
       IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY = 2, //!< Use this value to force Huffman encoding only (no string match).
       IMWRITE_PNG_STRATEGY_RLE          = 3, //!< Use this value to limit match distances to one (run-length encoding).
       IMWRITE_PNG_STRATEGY_FIXED        = 4  //!< Using this value prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.
     };

コード例:

int main() {
    
    
    string filename = "D:/workspace/cpp_workspace/my-cv/data/img/lena.jpg";
    Mat img = imread(filename, ImreadModes::IMREAD_COLOR);
    vector<int> params;
    params.push_back(IMWRITE_PNG_COMPRESSION);
    params.push_back(9);
    params.push_back(IMWRITE_PNG_STRATEGY);
    params.push_back(IMWRITE_PNG_STRATEGY_DEFAULT);
    
    imwrite(R"(D:\workspace\cpp_workspace\my-cv\1.png)", img);
    imwrite(R"(D:\workspace\cpp_workspace\my-cv\2.png)", img, params);
    return 0;
}

述べる:

1、RGB和BGR(opencv默认的彩色图像的颜色空间是BGR)颜色空间的转换

cv::COLOR_BGR2RGB
cv::COLOR_RGB2BGR
cv::COLOR_RGBA2BGRA
cv::COLOR_BGRA2RGBA

2、向RGB和BGR图像中增添alpha通道

cv::COLOR_RGB2RGBA
cv::COLOR_BGR2BGRA

3、从RGB和BGR图像中去除alpha通道

cv::COLOR_RGBA2RGB
cv::COLOR_BGRA2BGR

4、从RBG和BGR颜色空间转换到灰度空间

cv::COLOR_RGB2GRAY
cv::COLOR_BGR2GRAY

cv::COLOR_RGBA2GRAY
cv::COLOR_BGRA2GRAY

5、从灰度空间转换到RGB和BGR颜色空间

cv::COLOR_GRAY2RGB
cv::COLOR_GRAY2BGR

cv::COLOR_GRAY2RGBA
cv::COLOR_GRAY2BGRA

6、RGB和BGR颜色空间与BGR565颜色空间之间的转换

cv::COLOR_RGB2BGR565
cv::COLOR_BGR2BGR565
cv::COLOR_BGR5652RGB
cv::COLOR_BGR5652BGR
cv::COLOR_RGBA2BGR565
cv::COLOR_BGRA2BGR565
cv::COLOR_BGR5652RGBA
cv::COLOR_BGR5652BGRA

7、灰度空间域BGR565之间的转换

cv::COLOR_GRAY2BGR555
cv::COLOR_BGR5552GRAY

8、RGB和BGR颜色空间与CIE XYZ之间的转换

cv::COLOR_RGB2XYZ
cv::COLOR_BGR2XYZ
cv::COLOR_XYZ2RGB
cv::COLOR_XYZ2BGR

9、RGB和BGR颜色空间与uma色度(YCrCb空间)之间的转换

cv::COLOR_RGB2YCrCb
cv::COLOR_BGR2YCrCb
cv::COLOR_YCrCb2RGB
cv::COLOR_YCrCb2BGR

10、RGB和BGR颜色空间与HSV颜色空间之间的相互转换

cv::COLOR_RGB2HSV
cv::COLOR_BGR2HSV
cv::COLOR_HSV2RGB
cv::COLOR_HSV2BGR

11、RGB和BGR颜色空间与HLS颜色空间之间的相互转换

cv::COLOR_RGB2HLS
cv::COLOR_BGR2HLS
cv::COLOR_HLS2RGB
cv::COLOR_HLS2BGR

12、RGB和BGR颜色空间与CIE Lab颜色空间之间的相互转换

cv::COLOR_RGB2Lab
cv::COLOR_BGR2Lab
cv::COLOR_Lab2RGB
cv::COLOR_Lab2BGR

13、RGB和BGR颜色空间与CIE Luv颜色空间之间的相互转换

cv::COLOR_RGB2Luv
cv::COLOR_BGR2Luv
cv::COLOR_Luv2RGB
cv::COLOR_Luv2BGR

14、Bayer格式(raw data)向RGB或BGR颜色空间的转换

cv::COLOR_BayerBG2RGB
cv::COLOR_BayerGB2RGB
cv::COLOR_BayerRG2RGB
cv::COLOR_BayerGR2RGB
cv::COLOR_BayerBG2BGR
cv::COLOR_BayerGB2BGR
cv::COLOR_BayerRG2BGR
cv::COLOR_BayerGR2BGR

おすすめ

転載: blog.csdn.net/guo20082200/article/details/132017374