LoginSignup
0
0

More than 1 year has passed since last update.

二値化画像の白の部分を任意の色にしたい

Posted at

はじめに

二値化画像は、符号なしバイト(unsigned char)で1チャンネルのグレイスケールのMatで、黒(値0)と白(値255)組み合わせの白黒画像になります。
良く有効な部分は白で表す場合が多いですが、今回は白の部分をBGR(RGBでは無い)で埋めます。

考え方

入力の二値化画像お同じ大きさの符号なしバイト(unsigned char)で3チャンネルのMatを作り、それをcv::Scalarで任意の色の画像とします。
作成した色画像から二値化画像をマスクにして、コピーします。

・二値化画像
bin_img.png

この二値化画像の白の部分を緑にします。

ソースコード

main.cpp
#include <opencv2/opencv.hpp>
#include <stdio.h>

int main(int argc, char* argv[])
{
	//二値画像表示
	cv::Mat src = cv::imread("bin_img.png",CV_LOAD_IMAGE_GRAYSCALE);
	//任意の色をつけたsrcと同じ3チャンネルMatを作成
	cv::Mat color_mat = cv::Mat(src.size(),CV_8UC3);
	//緑色にする(cv::ScalarはB,G,R)の順
	color_mat = cv::Scalar(0,255,0);
	//二値画像の白の部分だけ緑にする
	cv::Mat complate_mat;

	color_mat.copyTo(complate_mat,src);

	//結果表示
	cv::imshow("src",src);
	cv::imshow("color_mat",color_mat);
	cv::imshow("complate_mat",complate_mat);
	cv::waitKey(0);

	return 0;
}

結果

・緑色の画像
green.png

・最終結果画像

result.png

結果

処理としてはマスクを使用した簡単なものですが、
例えば、任意の画像をコピーさせれば、
マスクされた画像を表示出来たりと、
応用の余地はあるかと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0