我有一個灰度圖像,我想通過使用調色板(如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