QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。

关于 slot传递 Mat 对象

以前一直是使用 Qtimer 定时器,设定超时后读取 dialog 对象的 Mat成员实现在 UI 里显示图像,发现这样对以后集成其他面向过程的代码增加了复杂度。

所以考虑使用 slot

即使用多线程处理图像后,发送 signal 给 dialog对象,dialog中 connect 他们就行了。

子线程.cpp

...

for(;;){

...

emit imageChanged (labelImg);

...

}

emit finished();

...

dialog.h

...

private slots:
void updateImage(const cv::Mat &img);

...

dialog.cpp

...

qRegisterMetaType< cv::Mat >("cv::Mat");
connect(worker, SIGNAL(imageChanged(const cv::Mat &)), this, SLOT(updateImage(const cv::Mat &)));

...

子线程.h

...

signals:
void imageChanged(const cv::Mat &img);

...

//////////////

父类 Worker

public slots:
virtual void doWork();

子线程

class CTWorker : public Worker

{
public:
CTWorker();
public slots:
void doWork(); //覆盖就 OK 了
};

#endif // CTWORKER_H

时间: 2025-01-15 14:34:10

QT中使用 slot 传递 opencv 中得Mat对象以及 使用多线程集成开源代码。的相关文章

OpenCV教程二 - Mat对象与它各种用法

学习OpenCV大家都会遇到一个对象叫做Mat,此对象非常神奇,支持各种操作.很多初学者因此被搞得头晕脑胀,它各种用法太多太杂,搞得初学者应接不暇,感觉有心无力.无处下手之感.这里我们首先要正本清源,从Mat对象的产生原因说起,然后再把Mat各种神奇用法一一梳理总结. Mat对象起源: 当OpenCV 1.0发布时候没有Mat对象,是个C语言风格的数据结构IPlImage来表示内存中图像对象,但是OpenCV开发者在做复杂图像处理算法分析与计算时候,创建了很多IplImage这样的数据结构,偶尔

Matlab中psf2otf()函数在opencv中的实现

在Matlab中有个psf2otf()函数,可以将小尺寸的点扩散函数,扩大尺寸,并作二维傅里叶变换,opencv中没有这个函数,所以编了这么个函数: /*****************************Mat psf2otf(const Mat&psf, Size outSize=Size(3,3))参数说明:psf--输入的点扩散函数:outSize--是输出otf的尺寸: 在本程序中,还调用了circShift()函数,该函数具体参见:http://www.cnblogs.com/p

C#中的DataSet、string、DataTable、对象转换成Json的实现代码

C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// <summary> /// 过滤特殊字符 /// </summary> /// <param name="s">字符串</param> /// <returns>json字符串</returns> private s

OpenCV中的结构体、类与Emgu.CV的对应表

OpenCv中的 C 结构 OpenCV中的 C++ 封装 Emgu.CV中的 C# 封装 OpenCV 和 Emgu.CV 中的结构罗列 谢谢阅读,有误希望指正 原文地址 Basic Structures: main data structures used in opencv. CvPoint CvPoint2D32f CvPoint2D64f CvPoint3D32f CvPoint3D64f Point_<typename _Tp> Point3_<typename _Tp>

OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解 (转)

cv::Matdepth/dims/channels/step/data/elemSizeThe class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It can be used to store (Mat类的对象用于表示一个多维度的单通道或者多通道稠密数组,它可以用来存储以下东西)real or complex-valued vectors or matrice

qt线程动态回调被调类中的函数

1.需求 要求封装一个qt线程能在不同类中调用,并能回调被调用类中的函数 2.解决 尝试多种方法,最终决定采用动态加载lamda表达式的方法解决 3.代码 catthread.h #ifndef CATTHREAD_H #define CATTHREAD_H #include <QtCore/QThread> #include <functional> class catthread : public QThread { Q_OBJECT public: catthread(QOb

详解 Qt 线程间共享数据(使用signal/slot传递数据,线程间传递信号会立刻返回,但也可通过connect改变)

使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的. Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容.Qt线程间共享数据主要有两种方式: 使用共享内存.即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的: 使用singal/slot机制,把数据从一个线程传递到另外一个线程. 第一种办法在各个编程语言都使用普遍,而第二种方式倒是QT的特有方式,下面主要学习一

opencv中Mat类型数据操作与遍历

Mat作为opencv中一种数据类型常常用来存储图像,相对与以前的IplImgae类型来说,Mat类型省去了人工的对内存的分配与释放,转而自动分配释放.Mat Class主要包括两部个数据部分:一个是matrix header(包括matrix的大小尺寸,储存方法,储存地址等等..),另一个是指向存储像素值的矩阵的指针. Opencv中对Mat的复制分为两种, Mat A, C; // creates just the header parts A = imread(argv[1], CV_LO

opencv中打印中文

一直以为是不好做的,但是方法一定是会有的. 相关资料,需要用的时候用. 转载]OpenCV中打印汉字 2012-11-05 20:05:04|  分类: 图像处理|举报|字号 订阅 本文转载自chai<OpenCV中打印汉字> bbs连接: http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=2083 让大家等这么久才公布代码,不好意思  代码: 全选 //========================================