内存IplImage图像链队列实现
来源:互联网 发布:昆仑虚手游进阶数据 编辑:程序博客网 时间:2024/05/20 04:27
从海康威视IPCamera摄像头里面采集到IplImage图像后,还需要与我的图像处理工程合并(一开始我是读文件的),想到的方法是使用链队列作为共享内容,然后一个线程负责采集图像,另一个线程负责处理图像。当然这两个线程的速度肯定是不匹配的,这个时候就需要自己处理一下,丢帧或者等待都可以。
另外在将图像存入链队列和从链队列里面取图像的时候都是临界区,我用的是互斥量处理的。
filename: Queue.h
/**********************************************************************************************************由于图片生成后都是放在内存里面的,而且中间不会进行什么插入、删除操作,所以链队列是最好的选择。*构建一个存放图片的链队列*********************************************************************************************************/#ifndef __Queue_H__#define __Queue_H__#include <iostream>#include "cv.h"#include "highgui.h"using namespace std;using namespace cv;//队列节点结构typedef struct QNode{IplImage * img;struct QNode * next;}QNode, *QueuePtr;//队列的链表结构typedef struct{QueuePtr front, rear; //队头队尾指针}LinkQueue;//求队列长度int QueueLength(LinkQueue * Q);//构建一个新队列bool InitQueue(LinkQueue * Q);//销毁队列bool DestoryQueue(LinkQueue * Q);//队列在队尾插入节点,入队操作//插入元素data为Q的新的队尾元素,插入成功返回true,否则返回falsebool EnQueue(LinkQueue *Q, IplImage * data);//队列在队头删除节点,出队操作//若队列不为空,删除Q的队头元素,用data返回该图像的地址,并返回true表示操作成功,否则返回falsebool DeQueue(LinkQueue *Q, IplImage ** data);//IplImage * DeQueue(LinkQueue *Q);#endif
filename: Queue.cpp
#include "Queue.h"//构建一个新队列//队头和队尾指针都指向同一个节点bool InitQueue(LinkQueue *Q){ Q->front=Q->rear = new QNode;if(!Q->front)return false;Q->front->next=NULL;return true;}//销毁队列bool DestoryQueue(LinkQueue * Q){while(Q->front){ Q->rear=Q->front->next; delete Q->front; Q->front=Q->rear;}return true;}/* 求队列的长度 */int QueueLength(LinkQueue * Q){ int i=0;QueuePtr p;p= Q->front;while(Q->rear!=p){ i++; p=p->next;}return i;}//队列在队尾插入节点,入队操作//插入元素data为Q的新的队尾元素,插入成功返回true,否则返回falsebool EnQueue(LinkQueue *Q, IplImage * data){QueuePtr s = new QNode;if(!s) //存储空间分配失败return false;s->img = data;s->next = NULL;Q->rear->next = s;Q->rear = s;return true;}//队列在队头删除节点,出队操作//若队列不为空,删除Q的队头元素,用data返回该图像的地址,并返回true表示操作成功,否则返回falsebool DeQueue(LinkQueue *Q, IplImage ** data){QueuePtr p;if(Q->front == Q->rear){cout<<"The Queue is NULL!"<<endl;return false;}p = Q->front->next;*data = p->img;Q->front->next = p->next;if(Q->rear == p)Q->rear = Q->front;delete p;return true;}
这个跟大话数据结构一书上的链队列其实是一样的,只不过数据不再是elementtype data,而是 IplImage * img.
4 0
- 内存IplImage图像链队列实现
- OPENCV下针对IplImage实现图像增强处理
- OPENCV下针对IplImage实现图像增强处理
- opencv 图像显示IplImage
- IplImage图像显示出错
- opecv IplImage加载图像
- IplImage 加载图像
- 共享内存队列的实现
- 通用图像转为IplImage格式
- openCV--图像处理类IplImage
- 图像差分 (IplImage *) 版
- 通用图像转为IplImage格式
- IPLImage图像访问图片像素
- opencv 表示图像的IplImage
- 用cvcopy函数实现 IplImage结构体下用cvSetImageROI截取ROI图像并且用小图贴上去
- QImage和IplImage共享内存
- 采用BlockingQueue实现内存消息队列
- 用内存映射实现posix消息队列
- 微信公众平台接口程序验证通过
- Half-life Launcher已停止工作
- 浅谈HTTP中Get与Post的区别
- 苹果新贵Swift,不错的自学教程
- GridView的常用属性
- 内存IplImage图像链队列实现
- 机器学习实战之决策树
- 《编程之美》2.20程序理解和时间分析
- Java 日期操作
- Androidpn
- CocoStudio UI 编辑器的使用
- 黑马程序员_java 基础部分
- Mysql charset Truncation vulnerability
- 微信公众后台的时间处理函数