Qt中使用QImage获取Opencv图像
// Opencv彩色图片通道是BGR不是RGB,这里要注意
Mat imgMat = imread("baboon.jpg", IMREAD_COLOR);
// cvtColor(imgMat, imgMat, COLOR_BGR2GRAY); // 转为灰度图
QImage img;
if(imgMat.channels() == 3)
{
img = QImage((const uchar*)imgMat.data,
imgMat.cols, imgMat.rows,
QImage::Format_BGR888); // Opencv是BGR通道
}
else
{
img = QImage((const uchar*)imgMat.data,
imgMat.cols, imgMat.rows,
QImage::Format_Grayscale8); // 灰度图
}
ui->label->setPixmap(QPixmap::fromImage(img));
// 以下时QImage转Mat
Mat tempMat;
QImage img("xxx.bmp");
if(img->isGrayscale()){ // 如果图片是灰度图
tempMat = cv::Mat(img.height(), img.width(), CV_8UC1, img.bits(),
img.bytesPerLine());
}else{ // 如果图片时彩色图像
img = img.convertToFormat(QImage::Format_BGR888); //rgb转成bgr
tempMat = cv::Mat(img.height(), img.width(),CV_8UC3, img.bits(),
img.bytesPerLine());
}
cv::imshow("tempMat", tempMat);