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
| void convertMat(cv::Mat newFrame, wxBitmap &bmp)
{
// Convert cv::Mat to wxBitmap
if(newFrame.channels() != 3)
throw std::logic_error("Input image should be 3-channel");
// data dimension
int w = newFrame.cols;
int h = newFrame.rows;
int size = w * h * 3 * sizeof(unsigned char);
// allocate memory for internal wxImage data
char* wxData = (char*) malloc(size);
// the matrix stores BGR image for conversion
cv::Mat cvRGBImg = cv::Mat(h, w, CV_8UC3, wxData);
// swap R&B channels
int mapping[] = {0,2,1,1,2,0}; // CV(BGR) to WX(RGB)
mixChannels(&newFrame, 1, &cvRGBImg, 1, mapping, 3);
// Make wxBitmap
bmp = wxBitmap(wxData, w, h, 3);
free(wxData);
} |
Partager