web-dev-qa-db-ja.com

cv :: Mat Opencvのチャンネル数を決定できますか

これは初歩的なものかもしれませんが、cv::Matがいくつのチャネルを持っているかを知ることは可能ですか?たとえば、RGB画像を読み込むと、3つのチャンネルがあることがわかります。 Opencv Documentationから直接、画像のラプラシアンを取得するために、次の操作を行います。

int main(int argc, char **argv)
{
     Mat src = imread(argv[1],1),src_gray,dst_gray,abs_dst_gray;

     cvtColor(src,src_gray,COLOR_BGR2GRAY);
     GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );
     Laplacian(src_gray,dst_gray,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
     convertScaleAbs(dst_gray,abs_dst_gray);
}

グレースケールに変換した後、チャネルは1つだけになります。しかし、プログラム内のabs_dst_grayのチャンネル数をどのように判断できますか?これを行う機能はありますか?それとも、プログラマが書くべき他の方法で可能ですか?ここで私を助けてください。

前もって感謝します。

17

Mat.channels()を呼び出します:

cv::Mat img(1,1,CV_8U,cvScalar(0));
std::cout<<img.channels();

出力:

1

これはチャネルの数です。

また、試してください:

std::cout<<img.type();

出力:

0

これはCV_8Uに属します(542行目で here を参照)。調査ファイルtypes_c.hdefineに対して。

36
LovaBill

あなたは使用するかもしれません:

Mat::channels()

http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-channels

8
hetepeperfan