2017-04-06
方法一:不使用opencv,使用Qt自带的load函数。
在主窗口的构造函数中添加如下:
//ui->setupUi(this); 在后面添加
QImage myImage;
myImage.load("lena.jpg");
ui.labelimage->setPixmap(QPixmap::fromImage(myImage).scaled(ui.labelimage->size()));
方法二:使用opencv
配置opencv
在搭建好Qt5.7和Vs2015后,配置opencv,我使用的是opencv3.1。
右击项目》》属性》》VC++目录》》配置包含目录和库目录。
在包含目录中添加:
D:\opencv\opencv\build\include
D:\opencv\opencv\build\include\opencv
D:\opencv\opencv\build\include\opencv2
在库目录中添加
D:\opencv\opencv\build\x64\vc14\lib
在链接器》》输入》》附加依赖项中添加lib文件:
opencv_world310d.lib
同理在Release模式下添加opencv_world310.lib
导入图片
添加头文件opencv2\opencv.hpp
添加button:命名为open
添加label,用于显示图片,命名为imagelabel
手动添加槽和信号,信号是click(),槽函数是:on_openButton_clicked()
void MyTest::on_openButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"),
".", tr("Image Files (*.png *.jpg *.bmp)"));
qDebug() << "filenames:" << fileName;
src = cv::imread(fileName.toLatin1().data());
if(src.data)
/*cv::imshow("tykgyu", src);//直接显示
waitKey(0);*/
displayMat(src); //显示
}
图片类型转换和显示
cv::Mat转换QImage
void MyTest::displayMat(Mat image)
{
Mat rgb;
QImage img;
cv::Size cvS;
QSize qtS;
qtS = ui.imagelabel->size();
cvS.height = ui.imagelabel->height();
cvS.width = ui.imagelabel->width();
cv::resize(image, image,cvS );//图像按照label的大小进行显示
if (image.channels() == 3)
{
//cvt Mat BGR 2 QImage RGB
cvtColor(image, rgb, CV_BGR2RGB);
img = QImage((const unsigned char*)(rgb.data),
rgb.cols, rgb.rows,
rgb.cols*rgb.channels(),
QImage::Format_RGB888);
}
else
{
img = QImage((const unsigned char*)(image.data),
image.cols, image.rows,
image.cols*image.channels(),
QImage::Format_RGB888);
}
ui.imagelabel->setPixmap(QPixmap::fromImage(img));//显示
}