// Mat类型转化为QImange
QImage Mat2QImage(const cv::Mat& InputMat)
{
cv::Mat TmpMat;
// convert the color space to RGB
if (InputMat.channels() == 1)
{
cv::cvtColor(InputMat, TmpMat, CV_GRAY2RGB);
}
else
{
cv::cvtColor(InputMat, TmpMat, CV_BGR2RGB);
}
// construct the QImage using the data of the mat, while do not copy the data
QImage Result = QImage((const uchar*)(TmpMat.data), TmpMat.cols, TmpMat.rows,
QImage::Format_RGB888);
// deep copy the data from mat to QImage
Result.bits();
return Result;
}
// QImage 转化为 Mat
cv::Mat QImage2cvMat(QImage image)
{
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());
break;
case QImage::Format_RGB888:
mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());
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;
}
return mat;
}
QImage Mat2QImage(const cv::Mat& InputMat)
{
cv::Mat TmpMat;
// convert the color space to RGB
if (InputMat.channels() == 1)
{
cv::cvtColor(InputMat, TmpMat, CV_GRAY2RGB);
}
else
{
cv::cvtColor(InputMat, TmpMat, CV_BGR2RGB);
}
// construct the QImage using the data of the mat, while do not copy the data
QImage Result = QImage((const uchar*)(TmpMat.data), TmpMat.cols, TmpMat.rows,
QImage::Format_RGB888);
// deep copy the data from mat to QImage
Result.bits();
return Result;
}
// QImage 转化为 Mat
cv::Mat QImage2cvMat(QImage image)
{
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());
break;
case QImage::Format_RGB888:
mat = cv::Mat(image.height(), image.width(), CV_8UC3, (void*)image.constBits(), image.bytesPerLine());
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;
}
return mat;
}