接下来添加on_OpenImage_clicked的函数内容。代码如下:
- void qttest1::on_OpenImage_clicked()
- {
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.jpeg *.bmp)"));
- image = cv::imread(fileName.toAscii().data());
- cv::namedWindow("Original Image");
- cv::imshow("Original Image", image);
- }
类似的办法添加Process按钮的相应代码:
- void qttest1::on_Process_clicked()
- {
- cv::flip(image, image, 1);
- cv::namedWindow("Output Image");
- cv::imshow("Output Image", image);
- }
这样就可以实现一个普通的按钮响应。但我们的目的是将图片显示在对话框form中,这还需要进一步深入学习。与MFC中显示图片需要CvvImage类似,要想在Qt的Form中显示图片,图片的格式也必须为QImage,需要将cv::Mat的BGR通道顺序变换为RGBA,QImage的格式为Format_RGB32,调用cvtColor实现(这里例程里调用的为BGR2RGB,然后QImage的格式为Format_RGB888,但我试验显示结果是有问题的,故自己调整了一下)。(后经实验,BGR2RGB,Format_RGB888这组参数对于webcam视频是正确的,对于我当时的实验照片是不正确的,格式的问题真是混乱!!!)实现代码如下:
- cv::cvtColor(image, image, CV_BGR2RGBA);
- QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB32);
- QLabel *label = new QLabel(this);
- label->move(200, 50);
- label->setPixmap(QPixmap::fromImage(img));
- label->resize(label->pixmap()->size());
- label->show();
注意打开图片的路径不要有中文,最后的显示结果为
相关代码的下载地址为