//打开图片文件
void OpenCVTestSf::OpenImageFile()
{
QString fileName = QFileDialog::getOpenFileName(this, "open Image", "", "Image File(*.bmp *.jpg *.jpeg *.png)");
QTextCodec* code = QTextCodec::codecForName("gb18030");
std::string name = code->fromUnicode(fileName).data();
m_srcImage = imread(name);
if (m_srcImage.data)
{
cvtColor(m_srcImage, m_srcImage, COLOR_BGR2RGB);//BGR转化为RGB
QImage::Format format = QImage::Format_RGB888;
switch (m_srcImage.type())
{
case CV_8UC1:
format = QImage::Format_Indexed8;
break;
case CV_8UC3:
format = QImage::Format_RGB888;
break;
case CV_8UC4:
format = QImage::Format_ARGB32;
break;
}
QImage img = QImage((const uchar*)m_srcImage.data, m_srcImage.cols, m_srcImage.rows,
m_srcImage.cols * m_srcImage.channels(), format);
ui.labImgShow->clear();
m_nImgWidth = m_srcImage.cols;//图像宽
m_nImgHeight = m_srcImage.rows;//图像高
QPixmap pixmap = QPixmap::fromImage(img);
pixmap = pixmap.scaled(ui.labImgShow->size());
ui.labImgShow->setAutoFillBackground(true);
QPalette palette;
palette.setBrush(ui.labImgShow->backgroundRole(), QBrush(pixmap));
ui.labImgShow->setPalette(palette);
ui.labImgShow->repaint();
}
打开图片,转换成OpenCV中的Mat数据类型的m_srcImage图片,将其图片转成Qt中的QImage和QPixmap,再根据显示图片组件的大小,将图片数据压缩进图片显示组件中去,这样图片就能完全的显示出来
特别说明
OpenCV中的图片数据是按BGR顺序排列的,而Qt中的图片数据是按RGB顺序排列的,所以就有了一个将OpenCV图片数据转换格式的代码
cvtColor(m_srcImage, m_srcImage, COLOR_BGR2RGB);//BGR转化为RGB
3、实际效果如下
原文地址 https://mp.weixin.qq.com/s/5-Bp4BGyDVpgLtJ1fkKpxw