2011-11-18 44 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