做一个简单的Demo,用Qt实现读取文件夹内所有图片并显示
1.在界面文件中放入push button
在button上点击右键,转到槽,在mainWindow.cpp中生成相应的clicked函数
输入QString fileName=QFileDialog::getExistingDirectory(this,tr(“Open Image”),QDir::currentPath());
完成点击按钮选择文件夹,并将文件夹名称输入出的功能
输入cout<<fileName.toStdString()<<endl;将选择的文件夹名称打印到后台
图像的本质也是一种数据结构,例如彩色的图片,本质是一个三通道的二维数组,每个元素里放置的rgb三个通道的颜色分量的大小,在opencv中图像可以用Mat表示,在Qt中,图像用QImage和QPixmap表示,Mat可以与QImage相互转换,如
QImage qtImage(cvSrcImage.data,cvSrcImage.cols,cvSrcImage.rows,cvSrcImage.step,QImage::Format_RGB888);
当然,QImage也可以直接读取图片,如
string tempDir=":/images/f1.png";
QImage qtImage(tempDir.c_str());
或
QImage Image;
Image.load(":/images/f1.png");
将QImage转成QPixmap即可显示出图像
如QPixmap pixmap =QPixmap::fromImage(qtImage.rgbSwapped());
ui->label->setPixmap(fitpixmap);
void MainWindow::on_fisheyeInn_clicked()
{
QString fileName = QFileDialog::getExistingDirectory(this,
tr("Open Image"), QDir::currentPath()
);
if (fileName.isEmpty())
{
cout << "Filepath is null" << endl;
}
else
{
vector<Mat> cvSrcImageArray;
vector<QImage> qtSrcImageArray;
cout<<Imagedir<<endl;
Imagedir = fileName.toStdString();
cout<<Imagedir<<endl;
vector<cv::String> ImageName = getImageName(Imagedir);
for(int i=0;i<ImageName.size();i++)
{
std::cout << "read image:" << ImageName[i] << std::endl;
Mat cvSrcImage= imread(ImageName[i],1);
cvSrcImageArray.push_back(cvSrcImage);
//cvtColor(cvSrcImage,cvSrcImage,CV_BGR2RGB);//opencv定义的是BGR形式的,但Qt定义的是RGB形式的,要转一下
//opencv的Mat与Qt的QImage转换
//QImage qtImage(cvSrcImage.data,cvSrcImage.cols,cvSrcImage.rows,cvSrcImage.step,QImage::Format_RGB888);
std::string tempDir=ImageName[i];
cout<<tempDir<<endl;
showImageQt(tempDir);
waitKey(1000);
}
std::cout << "end read........\n" << std::endl;
}
}
void MainWindow::showImageQt(string tempDir)
{
QImage qtImage(tempDir.c_str());
QPixmap pixmap =QPixmap::fromImage(qtImage.rgbSwapped());
int width = ui->label->width ();//要显示的宽度
int height =ui->label->height();
//QPixmap fitpixmap = pixmap.scaled(with, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); // 饱满填充
QPixmap fitpixmap = pixmap.scaled(width, height, Qt::KeepAspectRatio, Qt::SmoothTransformation);
ui->label->setPixmap(fitpixmap);
this->repaint();
//getchar();
}
vector<String> getImageName(std::string ImageDir)
{
//用的opencv的方式去遍历文件夹中所有文件名字,这里也可以自己用stl写一下
vector<String> Imagename;
glob(ImageDir,Imagename);
for(int i=0;i<Imagename.size();i++)
{
cout<<Imagename[i]<<endl;
}
return Imagename;
}
效果如下:
Windows下 yolov5 6.0版本转onnx转ncnn +安卓部署 附加ncnn环境配置 保姆级详细教程,踩了很多坑,基本是手把手将教你完成模型部署
场景复现Spring + MyBatis ,@Transactional不起作用
1、前言项目要走向国外市场,移动端Android和iOS,当然也包括后端和前端,需要进行国际化适配,但是之前的项目中是没有英文翻译文件的,所以需要将项目中所有的中文字符串进行收集交给专业的人士进行翻译,然后将翻译的英文内容分别整理到Android和iOS项目中去。无疑这是一个很繁琐且很容易出错的事情,而且后续在开发的过程中还会新增中文字符串,这个时候我们又需要重新走一遍上面的流程,哪怕只是新增了一个字符串!于是我们需要一个系统去专门处理这件事件,将功能开发和英文翻译这两件事分离开来,让专业的人士去做专业
1. 原地交换两个数字Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:x,y= 10,20print(x,y)x,y= y,xprint(x,y)#1 (10, 20)#2 (20, 10)赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 <a> 和 <b>...
zabbix5.0版本安装1:配置环境安装2:安装zabbix5.03:设置中文模式一:准备搭建系统环境centos7.6二:安装过程1:首先查看selinux是否关闭,没有关闭手动关闭# getenforce# vi /etc/selinux/conf //未关闭情况编辑关闭SELINUX=Disabled 修改为Disabled2:查看防火墙是否关闭# systemctl status firewalld# systemctl disable f
谢谢您的回复,很高兴您的问题看到曙光了。把所有除MS之外的程序都禁用,基本上不会影响系统的稳定性,反而可以排除一些影响系统稳定的第三方应用暂停。另外,您可以试试清除浏览器【已缓存的数据和文件】:【Internet Explorer】《在 Internet Explorer 中查看和删除浏览历史记录》https://support.microsoft.com/zh-cn/help/17438/......
加密方法:public String encryptDES(String encryptString, String encryptKey) throws Exception {IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);SecretKeySpec key = new SecretKeySpec(encryptKey.getB...
关于冒泡排序是什么怎么排序的我就不多赘述了,基本简单查找翻阅一下资料都可以弄明白,我这里是用冒泡排序的算法编写简单的java代码以及进行一些优化和之间的性能小评测。一、代码+讲解 (1)下面是一般的冒泡排序java代码: int arry[] = { 3, 2, 6, 8, 1, 9, 5 }; for (int i = 0; i < arry.length; i++) { ...
项目简介360影视(v.360.cn)改版后,不仅在视觉上有了一个全新的体验,在频道划分及内容整合上,也做出了很大调整,希望能够成为一个具有高水准用户体验及全网资源最全的视频网站~下面就和大家分享一下在这个改版过程中的问题及收获吧.前期准备在拿到设计需求之后,作为一名设计师,前期的思考是非常重要的,远比后续的在表现形式上面的思考要重要的多.正确的思路和梳理决定了产品的方向.所以在前期和
Scala高级特性1. 高阶函数--1--概念Scala混合了面向对象和函数式的特性,我们通常将可以作为参数传递到方法中的表达式叫做函数。在函数式编程语言中,函数是“头等公民”,把函数作为参数或者是返回值是函数叫高阶函数。高阶函数包含:作为值的函数、匿名函数、闭包、柯里化等等。--2-- 作为值的函数可以像任何其他数据类型一样被传递和操作的函数,每当你想要给算法传入具体动作...
在第三节我们已经介绍了 简单网络的自编码学习 知道了自编码学习其实就是学习到了输入数据的隐含特征,通过新的特征来表征原始数据,本节将介绍如何使用这些隐含特征进行模式分类; 还是以前面的三层自编码网络: 抽象一下如下: 其中学习到的权值系数W1与W1’是不一样的,我们把W1叫做编码权值,W1’叫做译码权值,原始数据在编码权值下的新数据Y就可以视为学习到了新维度下的数据,这在第三节也说
前两天装了Mathtype,最近才发现Ctrl+v不能复制了,原因是Mathtype插件中快捷键和这个冲突了,可以参考以下网址修改设置,就好了。link