我有一个灰度图像,我想通过使用调色板(如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);
}
}
}
更改,如果(真),以如果(假)针对不同像素的访问。
正确的结果是cvSet2D:
错误的结果与直接存储器存取:
谢谢您的帮助
现在看不到任何错误。 'imageData'中的正确字节顺序应该是BGR。如果您更改字节顺序,图像如何改变?它应该改变,否则你做错了什么。尝试仅渲染一种颜色(将其他通道保留为0 /黑色)。看看它们是否合适。对齐似乎是正确的,但我对围绕角落的强烈对比感到有点困惑。 – Mario
我发现了我的错误...其实它是RGB但这不是问题,我的颜色值为256而不是255 ...真的很抱歉...我想问这个问题帮助我找到了答案。 – david
啊......好吧。这解释了强烈的对比(由于溢出等原因)。:) – Mario