Mat to qimage
//转换格式
QPixmap qtworld1::getQImFromMat(cv::Mat mat)//mat转换为qimage输出
{
if (mat.empty()) return QPixmap();
QImage qImage;
cv::Mat cvImage;
switch (mat.type())
{
case CV_8UC1:
cv::cvtColor(mat, cvImage, cv::COLOR_GRAY2BGR);
break;
case CV_8UC3:
//cv::cvtColor(image, cvImage, cv::COLOR_BGR2RGB);
cvImage = mat;
break;
}
assert(cvImage.isContinuous());
qImage = QImage(cvImage.data, cvImage.cols, \
cvImage.rows, cvImage.cols * 3, QImage::Format_BGR888);
QPixmap pixmap;
return QPixmap::fromImage(qImage);
}
QImageToCvMat
cv::Mat qtworld1::QImageToCvMat(const QImage &inImage, bool inCloneImageData = true)
{
switch (inImage.format())
{case QImage::Format_ARGB32:
case QImage::Format_ARGB32_Premultiplied:
{
cv::Mat mat(inImage.height(), inImage.width(),
CV_8UC4,
const_cast<uchar*>(inImage.bits()),
static_cast<size_t>(inImage.bytesPerLine())
);
return (inCloneImageData ? mat.clone() : mat);
}
// 8-bit, 3 channel
case QImage::Format_RGB32:
case QImage::Format_RGB888:
{
if (!inCloneImageData)
{
qWarning() << "CVS::QImageToCvMat() - Conversion requires cloning because we use a temporary QImage";
}
QImage swapped = inImage;
if (inImage.format() == QImage::Format_RGB32)
{
swapped = swapped.convertToFormat(QImage::Format_RGB888);
}
swapped = swapped.rgbSwapped();
return cv::Mat(swapped.height(), swapped.width(),
CV_8UC3,
const_cast<uchar*>(swapped.bits()),
static_cast<size_t>(swapped.bytesPerLine())
).clone();
}
// 8-bit, 1 channel
case QImage::Format_Indexed8:
{cv::Mat mat(inImage.height(), inImage.width(),
CV_8UC1,
const_cast<uchar*>(inImage.bits()),
static_cast<size_t>(inImage.bytesPerLine())
);
return (inCloneImageData ? mat.clone() : mat);
}
default:
qWarning() << "CVS::QImageToCvMat() - QImage format not handled in switch:" << inImage.format();
break;
}
return cv::Mat();
}
将QPixmap转化为Mat
//将QPixmap转化为Mat
cv::Mat qtworld1::QPixmapToCvMat(const QPixmap &inPixmap, bool inCloneImageData = true)
{
return QImageToCvMat(inPixmap.toImage(), inCloneImageData);
}
QString to char
QString line1x = ui->lineEdit_8->text();//读出输入到line1中的字符串
QByteArray ba1 = line1x.toLatin1();
const char *p1x = ba1.data();
QString to int
QString line_pz = ui->lineEdit_11->text();//读出输入到line1中的字符串
int px = line_px.toInt();