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