1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| //Convert cvImage (cv::Mat) to wxImage
try
{
// data dimension
int w = cvImg.cols;
int h = cvImg.rows;
int size = w*h*3*sizeof(unsigned char);
// allocate memory for internal wxImage data
unsigned char* wxData = (unsigned char*) malloc(size);
// the matrix stores BGR image for conversion
Mat cvRGBImg = Mat(h, w, CV_8UC3, wxData);
switch (cvImg.channels())
{
case 3: // 3-channel case: swap R&B channels
{
int mapping[] = {0,2,1,1,2,0}; // CV(BGR) to WX(RGB)
mixChannels(&cvImg, 1, &cvRGBImg, 1, mapping, 3);
} break;
default:
{
cerr << "Cv2WxImage : input image (#channel=" << cvImg.channels() << ") should be either 3-channel" << endl;
}
}
wxImg.Destroy(); // free existing data if there's any
wxImg = wxImage(w, h, wxData);
}
catch(...)
{
} |
Partager