2

画像処理関連のコードの一部にOpenCVを使用しています。私は特定の時点で立ち往生しています。

特定のコードでは、画像のCIE L * a *b*値に基づいて画像のピクセル値を比較する必要があります。私はBGRのために私達がこのような何かをすることができることを知っています:

// img is the image, suppose
uchar *data = ( uchar* )img->imageData;

for(i=0; i< img->height; i++)
    for(j=0; j<img->width; j++)
     {
         b = data[i*img->widthStep + j*img->nChannels + 0];
         g = data[i*img->widthStep + j*img->nChannels + 1];
         r = data[i*img->widthStep + j*img->nChannels + 2]; 
     }

私の質問は、l * a * b*カラーモデルでも同様のことを行うことができるかということです。つまり、最初は画像を次のように変換します

cvCvtColor(img, lab, CV_BGR2Lab);

次に、上記の場合のように個々のチャネル情報にアクセスします(L * a * b *も3つのチャネルで構成されているため、間違っていない場合)、ピクセル値を取得できますか?

私がこれを求めている理由は、それを実装しようとしたのですが、非常に高い負の数のようないくつかの本当に奇妙な値を取得しています(範囲「a」と「b」がわからなかったので、ucharの代わりにintデータ型を使用しましたウィキペディアでは、「L」は0〜100の範囲の値しか持てないことがわかりました。では、これらのピクセル値をどのように正確に取得できますか?

前もって感謝します !!

4

1 に答える 1

2

確かに、あなたはそれをすることができます、なぜですか?ただし、出力はある程度具体的であることに注意してください(負の値になる可能性があるため)ab

On output 0≤L≤100, -127≤a≤127, -127≤b≤127
The values are then converted to the destination data type:
    8-bit images:
        L <- L*255/100, a <- a + 128, b <- b + 128

L(0-100ではなく)0-255の範囲にもスケーリングされることに注意してください。詳しくはこちらをご覧ください

ところで、データ型がunsigned charの場合、どうすれば負の数を取得できますか?

于 2012-06-15T02:29:45.750 に答える