QImage 转为Mat
void QImageToMat(QImage image, cv::Mat& mat) { switch (image.format()) { case QImage::Format_ARGB32: case QImage::Format_RGB32: case QImage::Format_ARGB32_Premultiplied: { mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine()); std::vector<cv::Mat>channels; split(mat, channels); channels.pop_back(); cv::merge(channels, mat); } break; case QImage::Format_RGB888: mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine()); //cv::cvtColor(mat, mat, CV_BGR2RGB); break; case QImage::Format_Indexed8: mat = cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine()); break; } }
void QByteArrayToMat(QByteArray array, cv::Mat& mat) { QBuffer buffer(&array); buffer.open(QIODevice::ReadOnly); QImageReader reader(&buffer, "JPG"); QImage image = reader.read(); switch (image.format()) { case QImage::Format_ARGB32: case QImage::Format_RGB32: case QImage::Format_ARGB32_Premultiplied: { mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine()); std::vector<cv::Mat>channels; split(mat, channels); channels.pop_back(); cv::merge(channels, mat); } break; case QImage::Format_RGB888: mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine()); //cv::cvtColor(mat, mat, CV_BGR2RGB); break; case QImage::Format_Indexed8: mat = cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine()); break; } }
QByteArray转为Mat
void QByteArrayToMat(QByteArray array, cv::Mat& mat) { QBuffer buffer(&array); buffer.open(QIODevice::ReadOnly); QImageReader reader(&buffer, "JPG"); QImage image = reader.read(); switch (image.format()) { case QImage::Format_ARGB32: case QImage::Format_RGB32: case QImage::Format_ARGB32_Premultiplied: { mat = cv::Mat(image.height(), image.width(), CV_8UC4, (void*)image.constBits(), image.bytesPerLine()); std::vector<cv::Mat>channels; split(mat, channels); channels.pop_back(); cv::merge(channels, mat); } break; case QImage::Format_RGB888: mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine()); //cv::cvtColor(mat, mat, CV_BGR2RGB); break; case QImage::Format_Indexed8: mat = cv::Mat(image.height(), image.width(), CV_8UC1, (void*)image.constBits(), image.bytesPerLine()); break; } }