Qt & opencv 学习(二)
例子:打开图片并显示。打开图片利用Qt的标准文件对话框,第一步是利用OpenCV创建窗口并显示。
添加一个Button,转到信号槽添加代码:
using namespace cv;
Mat image; void Widget::on_openButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),
".",tr("Image Files (*.png *.jpg *.bmp)"));
qDebug()<<"filenames:"<<fileName;
image = cv::imread(fileName.toAscii().data());
cv::namedWindow(fileName.toAscii().data(),CV_WINDOW_AUTOSIZE)); //display use a new window
cv::imshow((fileName.toAscii().data(), image);
}
代码例子来源:http://www.cnblogs.com/emouse/archive/2013/03/29/2988717.html
1、QFileDialog::getOpenFileName() 函数原型如下:
QString QFileDialog::getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QString & dir = QString(), const QString & filter = QString(), QString * selectedFilter = 0, Options options = 0)
第一个参数是父窗口指针,第二个参数是文件对话框的标题,第三个参数是文件对话框的初始路径,如果这个路径包含某个文件,那么这个文件会被处于选中状态。第4个和第5个参数的含义是Only files that match the given filter are shown. The filter selected is set to selectedFilter.第4个好理解,第5个什么意思没看懂。
2、cv::imread() 函数原型是 Mat imread(const string& filename, int flags),就是从图片文件读取文件。
这是一个opencv库中的c++接口,官方介绍文档在这里http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html
3、QString::toAscii() 和QByteArray::data()函数
前者的函数原型是QByteArray QString::toAscii() const 定义是Returns an 8-bit representation of the string as a QByteArray.
后者的函数原型是char * QByteArray::data() 定义是Returns a pointer to the data stored in the byte array. The pointer can be used to access and modify the bytes that compose the array. The data is '\0'-terminated, i.e. the number of bytes in the returned character string is size() + 1 for the '\0' terminator.
上面的应用例子就是QString转char*。
4、cv::cvnamedWindow()和cv::imshow是opencv里的两个常用函数。
cvnamedWindow用于创建一个命名窗口,imshow用于在命名窗口上显示图像。
补充:上面这个例子在嵌入式QT环境下还是运行不了的。出现的出错情况如下:

上面这里的错误,大概是cvnamedWindow等函数是没有被实现。还不能使用。 出了问题,就换个解决方式。用下面这个函数。函数来源还是上面推荐的那个网站。
//Mat->QImage
static QImage ConvertToQImage(cv::Mat &mat)
{
QImage img;
int nChannel=mat.channels();
if(nChannel==)
{
cv::cvtColor(mat,mat,CV_BGR2RGB);
img = QImage((const unsigned char*)mat.data,mat.cols,mat.rows,QImage::Format_RGB888);
}
else if(nChannel==||nChannel==)
{
img = QImage((const unsigned char*)mat.data,mat.cols,mat.rows,QImage::Format_ARGB32);
} return img;
}
Qt & opencv 学习(二)的更多相关文章
- Qt & opencv 学习(一)
Qt也没怎么系统学过,opencv也没系统学过.慢慢来,一步一步弄清楚吧. 天嵌科技有个文档,先去看这个文档,主要是开发环境的配置.文档名字就是QT应用程序开发手册-20150918.pdf.在QT里 ...
- Qt Lighthouse学习(二),就是QPA(Qt Platform Abstraction) 项目的名字
上一次关注Qt Lighthouse是在6月初,可是现在都8月底了.时间真快... Lighthouse 是 QPA(Qt Platform Abstraction) 项目的名字,它使得将Qt移植到新 ...
- opencv学习笔记(二)寻找轮廓
opencv学习笔记(二)寻找轮廓 opencv中使用findContours函数来查找轮廓,这个函数的原型为: void findContours(InputOutputArray image, O ...
- 项目实战:Qt+OpenCV大家来找茬(Qt抓图,穿透应用,识别左右图区别,框选区别,微调位置)
前言 本项目的出现理由只是笔者的一个念头,于是利用专业Qt和Opencv相关的知识开发一个辅助工具,本文章仅用于Qt和Opencv结合的学习. Demo演示效果 运行包下载地 ...
- opencv学习笔记(七)SVM+HOG
opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子 ...
- opencv学习笔记(一)IplImage, CvMat, Mat 的关系
opencv学习笔记(一)IplImage, CvMat, Mat 的关系 opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,M ...
- 开发环境配置--Ubuntu+Qt4+OpenCV(二)
同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...
- 开始QT+OpenCV学问
最近一个月.由于超声造影软件工具做.因此,开始接触OpenCV.使用OpenCV的话.除了图像处理,其它功能都非常弱.所以又開始学习MFC. 从原先的.net C#编程环境一下变成MFC还真有点不习惯 ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
随机推荐
- bzoj2850巧克力王国
巧克力王国 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 861 Solved: 325[Submit][Status][Discuss] Desc ...
- bzoj 5055: 膜法师 树状数组+离散
先枚举每一个数,看它前面有几个比它小,算一下和为sum1,后面有几个比它大,算一下和为sum2,对答案的贡献为A[i]*sum1*sum2. 离散化后,树状数组就可以了. 就是倒着一边,顺着一边,统计 ...
- cf468C Hack it!
Little X has met the following problem recently. Let's define f(x) as the sum of digits in decimal r ...
- Spring-IOC源码解读2.2-BeanDefinition的载入和解析过程
1. 对IOC容器来说这个载入过程就像是相当于把BeanDefinition定义的信息转化成Spring内部表示的数据结构.容器对bean的管理和依赖注入过程都是通过对其持有的BeanDefiniti ...
- Golang中的panic和recover(捕获异常)
func panic(interface{})和func recover() interface{}是Golang中用于错误处理的两个函数. panic的作用就是抛出一条错误信息,从它的参数类型可以看 ...
- PAT (Advanced Level) 1086. Tree Traversals Again (25)
入栈顺序为先序遍历,出栈顺序为中序遍历. #include<cstdio> #include<cstring> #include<cmath> #include&l ...
- log4j配置(转载)
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- 使用css绘制六边形
用css绘制六边形需要使用到三个容器,分别用于绘制六边形的三个部分,如下图所示: 接下来,就是代码了: CSS: ;;border-top: 30px solid #6c6;border-left: ...
- Spring实战Day7面向切面编程术语介绍
#### 面向切面编程 为什么需要切面? 有些功能需要在应用中的多个地方使用到,但是我们又不想在着每个地方都调用他们 切面术语 通知(advice):切面需要完成的工作 通知的类型(什么时间完成工作) ...
- 【kotlin】long转化为date类型 或者date字符串
1.方法体中的 package org.joda.time.DateTime(long类型) fun Long?.toDateTime() = if (null != this) DateTime(t ...