My attempt at OpenCV 3.1+ style code:
void qimage_to_mat(const QImage& image, cv::OutputArray out) { switch(image.format()) { case QImage::Format_Invalid: { Mat empty; empty.copyTo(out); break; } case QImage::Format_RGB32: { Mat view(image.height(),image.width(),CV_8UC4,(void *)image.constBits(),image.bytesPerLine()); view.copyTo(out); break; } case QImage::Format_RGB888: { Mat view(image.height(),image.width(),CV_8UC3,(void *)image.constBits(),image.bytesPerLine()); cvtColor(view, out, COLOR_RGB2BGR); break; } default: { QImage conv = image.convertToFormat(QImage::Format_ARGB32); Mat view(conv.height(),conv.width(),CV_8UC4,(void *)conv.constBits(),conv.bytesPerLine()); view.copyTo(out); break; } } } void mat_to_qimage(cv::InputArray image, QImage& out) { switch(image.type()) { case CV_8UC4: { Mat view(image.getMat()); QImage view2(view.data, view.cols, view.rows, view.step[0], QImage::Format_ARGB32); out = view2.copy(); break; } case CV_8UC3: { Mat mat; cvtColor(image, mat, COLOR_BGR2BGRA);
TimSC source share