2017-05-11 77 views
1

グレースケール画像を1つのカラー画像に変換する方法があるのだろうか?グレースケールの画像を持っていて、それを青の色合いに変換したいのですが?それはOpenCVで可能ですか?OpenCVでグレースケール画像を単色に変換する

ありがとうございました!

+1

OpenCVを要求するのはやや単純です。 RGB値を見る場合は、グレースケール値を適切な場所のR、G、またはBに移動し、残りの部分をゼロにします。 –

答えて

1

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

通常、グレースケール画像は1次元だけです。通常、RGB(3次元)を受け入れる関数にグレースケール画像を渡したい場合は、マトリックスを3回複製してMxNx3マトリックスを作成します。ブルーチャンネルのみを使用する場合は、第1次元と第2次元で0のMxNを連結し、元のグレースケール値を3次元に入れます。

0

これを達成するには、グレースケール画像のすべてのピクセルを繰り返し処理し、値を色の範囲にマップするだけです。ここに擬似コードがあります:

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); 
} 

関連する問題