OpenCV_RGB 画像を分離

cv::split を使う。

分離した R・G・B は 1 チャンネルなので、
カラーで表示するには他の輝度 (輝度値 0 ) で補う。

なお、分離した 1 チャンネル Mat を 3 チャンネルに統合するには
cv::merge を使う

 

ex )

    // 分離  splitTmp[0] ~ splitTmp[2] に B・G・R が格納
    cv::Mat src = cv::imread("./hoge.png", -1);
    std::vector<cv::Mat> splitTmp;
    cv::split(src, splitTmp);
   
    // 統合
    cv::Mat dst;
    cv::merge(splitTmp, dst);
    cv::imwrite("./fuga.png", dst);

上記のコードでは hoge.png 、fuga.png も同じ画像。

 

分離した splitTmp[m] を色つきで表示するには、
3 チャンネルに変換して for文で画素にアクセスし、0 を代入

簡易コード
    cv::cvtColor ( splitTmp[m], dst, CV_GRAY2BGR );
    dst.at<Vec3b>(y, x)[n] = 0;

Vec3b:uchar 型3要素

 

こちらから。
https://qiita.com/hitomatagi/items/35d079648c12b533bcb4
http://minus9d.hatenablog.com/entry/20130204/1359989829
http://opencv.jp/opencv-2svn/cpp/operations_on_arrays.html#cv-merge

 

以上。