グレースケール画像を1つのカラー画像に変換する方法があるのだろうか?グレースケールの画像を持っていて、それを青の色合いに変換したいのですが?それはOpenCVで可能ですか?OpenCVでグレースケール画像を単色に変換する
ありがとうございました!
グレースケール画像を1つのカラー画像に変換する方法があるのだろうか?グレースケールの画像を持っていて、それを青の色合いに変換したいのですが?それはOpenCVで可能ですか?OpenCVでグレースケール画像を単色に変換する
ありがとうございました!
opencvコミュニティanswerによると、自分で3チャンネルの画像を作成する必要があります。
Mat empty_image = Mat::zeros(src.rows, src.cols, CV_8UC1);//initial empty layer
Mat result_blue(src.rows, src.cols, CV_8UC3); //initial blue result
Mat in1[] = { ***GRAYINPUT***, empty_image, empty_image }; //construct 3 layer Matrix
int from_to1[] = { 0,0, 1,1, 2,2 };
mixChannels(in1, 3, &result_blue, 1, from_to1, 3); //combine image
その後、青いチャネルの画像を取得できます。通常、opencvのカラー画像の青色のチャンネルは最初のレイヤー(BGRとして3チャンネルを入れる)です。あなたは、各ピクセル方式のコピーを使用したい場合はところで
、次の2つのループがあるのでしかし、それは時間がかかります空の画像
Mat result_blue(src.rows, src.cols, CV_8UC3); //blue result
for (int i =0; i<src.rows; i++)
for (int j=0; j<src.cols; j++){
Vec3b temp = result_blue.at<Vec3b>(Point(i,j));//get each pixel
temp[0] = gray.at<uchar>(i,j); //give value to blue channel
result_blue.at<Vec3b>(Point(x,y)) = temp; //copy back to img
}
初期ことができます!
通常、グレースケール画像は1次元だけです。通常、RGB(3次元)を受け入れる関数にグレースケール画像を渡したい場合は、マトリックスを3回複製してMxNx3マトリックスを作成します。ブルーチャンネルのみを使用する場合は、第1次元と第2次元で0のMxNを連結し、元のグレースケール値を3次元に入れます。
これを達成するには、グレースケール画像のすべてのピクセルを繰り返し処理し、値を色の範囲にマップするだけです。ここに擬似コードがあります:
grayImage:imageObject;
tintedImage:imageObject;
//Define your color tint here
myColorR:Int = 115;
myColorG:Int = 186;
myColorB:Int = 241;
for(int i=0; i<imagePixelArray.length; i++){
float pixelBrightness = grayImage.getPixelValueAt(i)/255;
int pixelColorR = myColorR*pixelBrightness;
int pixelColorG = myColorG*pixelBrightness;
int pixelColorB = myColorB*pixelBrightness;
tintedImage.setPixelColorAt(i, pixelColorR, pixelColorG, pixelColorB);
}
OpenCVを要求するのはやや単純です。 RGB値を見る場合は、グレースケール値を適切な場所のR、G、またはBに移動し、残りの部分をゼロにします。 –