グレースケール画像をカラーパレット(Matlabのカラーマップのような)でマッピングすることで、グレースケール画像をカラーで表示したいのですが、直接ピクセルアクセスによるOpenCvカラーマッピング
私はOpenCV cvSet2D機能を使用して管理しましたが、パフォーマンス上の理由から、直接ピクセルにアクセスしたいと思います。
しかし私がそうするとき、イメージには奇妙な色があります。私は異なる色(RGB、BGR、...)で色を設定しようとしましたが、周りを回っているように見えません。
IplImage* temp = cvCreateImage(cvSize(img->width/scale,img->height/scale), IPL_DEPTH_8U, 3);
for (int y=0; y<temp->height; y++)
{
uchar* ptr1 = (uchar*) (temp->imageData + y * temp->widthStep);
uchar* ptr2 = (uchar*) (img->imageData + y * img->widthStep);
for (int x=0; x<temp->width; x++)
{
CvScalar v1;
int intensity = (int)ptr2[x];
int b=0, g=0, r=0;
r = colormap[intensity][0];
g = colormap[intensity][1];
b = colormap[intensity][2];
if (true)
{
ptr1[3*x] = b;
ptr1[3*x+1] = g;
ptr1[3*x+2] = r;
}
else
{
v1.val[0] = r;
v1.val[1] = g;
v1.val[2] = b;
cvSet2D(temp, y, x, v1);
}
}
}
変更した場合は(真の)異なるピクセルアクセス用の場合(偽)へ:
は私のコードがあります。
ダイレクトメモリアクセスと間違った結果:
間違いはありません。正しいバイトオーダは 'imageData'の中のBGRでなければなりません。バイトオーダーを変更した場合、イメージはどのように変化しますか?それは変わるべきです、さもなければあなたは何か間違っています。 1つの色だけをレンダリングしてみてください(他のチャンネルは0 /黒のままにしておきます)。それらが合うかどうかを確認してください。アラインメントは正しいようですが、私はコーナーの周りの硬いコントラストについて少し混乱しています。 – Mario
私のエラーを見つけました...実際にはRGBですが、それは問題ではありませんでした.255の代わりに256の色値を持っていました...本当に申し訳ありません...私は質問をして答えを見つけました。 – david
ああ...大丈夫。それはハードコントラスト(オーバーフローなどによる)を説明しています。:) – Mario