カラー画像を3色で分離、さらに色を入れ替えた画像を作成


このエントリーをはてなブックマークに追加

コード

以下の通り。

void bgr_split(){
	cv::Mat src = cv::imread("./input/baboon.jpg", 1);
	vector<cv::Mat> planes;

	// 3つのチャネルB, G, Rに分離 (OpenCVではデフォルトでB, G, Rの順)
	cv::split(src, planes);
	
	// 保存
	cv::imwrite("./output/b.jpg", planes[0]);
	cv::imwrite("./output/g.jpg", planes[1]);
	cv::imwrite("./output/r.jpg", planes[2]);

	// チャネルを入れ替えた画像を作成し保存
	cv::Mat dst;
	vector<cv::Mat> color_shuffle;
	color_shuffle.push_back( planes[1] );
	color_shuffle.push_back( planes[2] );
	color_shuffle.push_back( planes[0] );
	cv::merge(color_shuffle, dst);
	cv::imwrite("./output/shuffled.jpg", dst);
}

int main(int argc, char *argv[])
{
	bgr_split();
	return 0;
}

結果

すべてクリックで拡大。

入力画像

に対し、B, G, Rのそれぞれの画素値のみを取り出して生成した単一チャネルの画像は以下のようになった。



また、色を入れ替えて生成した画像は以下のようになった。

参考