(1)展示浏览页面并获取目录且将该目录下文件显示在comboBox
path = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this, tr("view file"), QDir::currentPath()));//打开目录页面,选择相应目录,path获取字符
ui->PATHLineEdit->setText(path);//将目录显示在LineEdit上
QFileInfoList list;
QDir dir(path);
dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);//获取path下的所有文件
list = dir.entryInfoList();//放到一个list里
for(int i = 0;i < list.length(); i++ )
{
file = list.at(i).fileName();
ui->comboBox->addItem(file);//逐一显示到comboBox上
}
(2)检测此时comboBox上显示的是哪个内容
for(int i = 0; i < list.length(); i++ )//list.length()的大小即comboBox内容的数量,且一一对应
{
if(ui->comboBox->currentIndex()==i)//找出对应内容
{
imgBef = list.at(i).fileName().toStdString();//获取该文件名
}
}
(3)报错弹窗
QMessageBox::information(this, "错误!", "请选择.jpg文件");
QMessageBox::information(this, "错误!", "请选择正确的文件位置");
(4)文件目录处理
//由于openc无法读取Qstring字符串,要先将Qstring转化为string,
//但是目录转化后只有一个“\”,Qt还是无法读取,需要将“\”转化为“\\”,
//之后再用opencv读取图片
img = path.toStdString();//Qstring转化为string
for(i = 0; i < iSize; i++)
{
if('\\' == img[i])
{
img1 = img1 + "\\"+"\\";
continue;
}
img1 = img1 + img[i];
}
(5)opencv Mat类型转化为Qt QImage
QImage Widget::Mat2QImage(cv::Mat& image)
{
QImage img;
if (image.channels() == 3) {
cvtColor(image, image, CV_BGR2RGB);
img = QImage((const unsigned char*)(image.data), image.cols, image.rows,
image.cols * image.channels(), QImage::Format_RGB888);
}
else if (image.channels() == 1) {
img = QImage((const unsigned char*)(image.data), image.cols, image.rows,
image.cols * image.channels(), QImage::Format_ARGB32);
}
else {
img = QImage((const unsigned char*)(image.data), image.cols, image.rows,
image.cols * image.channels(), QImage::Format_RGB888);
}
return img;
}
(6)在Qt label中显示opencv检测结果
Mat Image = detect(names_file_, cfg_file_, weights_file_, img1);//opencv检测结果
QImage QImg = Mat2QImage(Image); //opencv Mat类型转化为Qt QImage
QSize laSize=ui->showLabel->size(); //label_carema是要显示图片的label的名称
QImg = QImg.scaled(laSize,Qt::IgnoreAspectRatio);//重新调整图像大小以适应窗口
ui->showLabel->setPixmap(QPixmap::fromImage(QImg));//显示图片
(7)包含的头文件
#include "widget.h"
#include "ui_widget.h"
#include <iostream>
#include <opencv2\opencv.hpp>
#include <QDebug>
#include <QDir>
#include <QString>
#include <QFileDialog>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include "opencvdarknet.h"
#include <QMessageBox>
#include <QImage>
#include "opencv2/imgproc/types_c.h"