конвертирование изображений между opencv и wxwidgets - PullRequest
2 голосов
/ 18 ноября 2011

У меня большая проблема.После поиска в интернете я не нашел хорошего решения.Я читаю изображения из файлов через opencv (2.3) и манипулирую ими.После этого я хочу представить результат в своем приложении, написанном в wxwidgets (2.9.3).Основная проблема в том, что мои изображения в градациях серого, и поэтому у меня только один указатель на данные, но wxwidgets просто использует RGB.просто маленький пример:

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);

Ответы [ 2 ]

4 голосов
/ 18 ноября 2011

Все, что вам нужно сделать, это конвертировать из градаций серого в RGB (фактически, в BGR, если вы работаете в Windows).

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 голос
/ 18 ноября 2011

Вы всегда можете установить R=G=B=<your grayscale value> для каждого пикселя. Если формат пикселей изображения не совпадает, вы можете выделить новый массив в формате, ожидаемом wxImage, и заполнить его этими значениями RGB.

Вы также можете взглянуть на эту ссылку . Это похоже на то, что вам нужно сделать.

...