5

imread createのデフォルトのピクセルタイプは何ですか?私はさまざまな画像をテストしますが、それらはすべて、さまざまなチャネルのunsignedcharを提供します。明示的に要求しない場合、imreadはsigned charを使用してピクセルタイプを作成しますか?

cv::Mat img = cv::imread("lena.jpg", -1); //always give me unsigned char

cv :: imreadのドキュメントを確認しましたが、imreadcreateのデフォルトピクセルについては何も書かれていませんでした。

ドキュメントのリンク http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#Matimread(const string&filename、int flags)

4

1 に答える 1

17

ほとんどの.jpg画像は 8 ビット画像です。したがって、デフォルトのデータ型はunsigned charorcharです。

一部の画像は16 ビット ピクセル値と同様.png、またはサポートするため、データ型は. ただし、8 ビットの可能性があるため、必須ではありません。.tifunsigned short

OpenCV でイメージをそのままロードするには、次のように imread を使用します。

cv::Mat img = cv::imread(imagePath, CV_LOAD_IMAGE_ANYCOLOR | CV_LOAD_IMAGE_ANYDEPTH);

これらのフラグにはさまざまな組み合わせがあります。

8 ビットとしてロード (元の深度が何であれ):

CV_LOAD_IMAGE_COLOR

元の深さでロード:

CV_LOAD_IMAGE_COLOR | CV_LOAD_IMAGE_ANYDEPTH

グレースケールとして読み込みます (画像のチャンネル数に関係なく):

CV_LOAD_IMAGE_GRAYSCALE

元の深度でグレースケールとしてロードする:

CV_LOAD_IMAGE_GRAYSCALE| CV_LOAD_IMAGE_ANYDEPTH

あなたの場合、lena.jpg8ビットのイメージなので、unsigned charデータ型を取得しています。

アップデート:

OpenCV の新しいバージョンでは、C++ インターフェイスで enum によって定義されたフラグを使用します。CV_LOAD_IMAGE_*に置き換えるだけcv::IMREAD_*です。

CV_LOAD_IMAGE_GRAYSCALEになりcv::IMREAD_GRAYSCALEます。

于 2012-11-27T05:38:28.873 に答える