2011-11-18 103 views
2

我遇到了一個很大的問題。在通過互聯網搜索之後,我沒有找到一個好的解決方案。我通過opencv(2.3)從文件中讀取圖像並操作它們。之後,我想在我的應用程序中使用wxwidgets(2.9.3)編寫結果。主要的問題是,我的圖像是灰度的,所以我只有一個數據指針,但wxwidgets只是使用RGB。只是一個小例子:在opencv和wxwidgets之間轉換圖像

cv::imread(filename,CV_LOAD_IMAGE_GRAYSCALE).convertTo(pictureMatrix,CV_32F,(float)(1/2.0f),0); 
// here are some more floating point calculations 
cv::Mat output; 
pictureMatrix.convertTo(output,CV_8U); 
wxImage test(output.rows, output.cols, output.data, true); 
wxInitAllImageHandlers(); 
// saving the picture is just for testing, if it works 
test.SaveFile("test.png", wxBITMAP_TYPE_PNG); 

回答

4

所有你需要做的就是從灰度轉換爲RGB(實際上,如果你在Windows上,則轉換爲BGR)。

cv::Mat grayOutput, rgbOutput; 
pictureMatrix.convertTo(grayOutput,CV_8U); 
cvtColor(grayOutput, rgbOutput, CV_GRAY2BGR); // note the BGR here. 
//If on Linux, set as RGB 
wxImage test(rgbOutput.cols, rgbOutput.rows, rgbOutput.data, true); 
... 
1

您可以隨時爲每個像素設置R=G=B=<your grayscale value>。如果圖像像素的格式不匹配,則可以按照wxImage預期的格式分配一個新陣列,並用這些RGB值填充它。

你也可以看看this link。它看起來類似於你需要做的事情。

+1

該解決方案也適用,但按像素訪問不是必需的。謝謝 – Sonic