这两天在调视讯稳定的code。
说说整个的流程吧,有个总体的思路才好理清楚。
视讯稳定的code 是W老师给的,不是很熟悉,只是知道开始计算 光流,后面计算累加 在后面就是几帧的平均
最后就是 求一个转换矩阵吧。
程序最早就可以用 是直接输入一个视频 可以输出处理之后的图片。
然后我可以把处理之后的图片写在一个文件夹下
1. 首先是把这个程序变成处理完前面的三个步骤,然后把最后一个一步 处理一个图片 显示一个图片 看上去像处理的实时的。实际上不是。
2. 把视频改成一帧一帧处理的,对于视频来说,从第二帧开始一帧处理一个。我打印出来的时候发现输出的内容不对,开始一直以为是vector 里面读取的数据不对,想改掉这个bug 但是没有成功。
昨天晚上码神 查出来bug 的原因是 因为maxframe 的原因,对于一个视频,maxframe 是固定的,vextor 是一个递增的分配内存的这么一个东西,来一帧分配一片内存,vector 的size 一般会比maxframe 的小。
限定条件除了问题。另外的一个问题是 之前是i+j 我后面改成k+j 但是之前的i+j 的i 是从0 开始,所以应该改为看k-1
+j 索性把k=1 改成k=0 好像我之前尝试过把k=1 变成k=0 但是报错,就没有改这个问题(拖延症)。
3. 第三个就是框架的问题,我是一直没想清楚这个事该怎么干。
CY 是这么干的,因为输入的 BYTE 然后 BYTE 可以转换成Ipimage 类型的 然后转成mat 类型的。
Ipimage *img=cvCreateImageHeader(cvSize(inWidth,inHeight),IPL_DEPTH_8U,3);
img->imageData=inputImg
把char型的inputImg 转成 Ipimage, Ipimage 转 Mat Mat cur(img)
Mat- Ipimage-> BYTE
Ipimage *src_resize=cvCreateImageHeader(size,IPL_DEPTH_8U,3);
src_resize->imageData=outputImg;
// 在网上找到的答案:
OpenCV中IplImage图像格式与BYTE图像数据的转换
IplImage* iplImage;
BYTE* data;
1 由IplImage*得到BYTE*图像数据:
data = iplImage->imageDataOrigin; //未对齐的原始图像数据
或者
data = iplImage->imageData; //已对齐的图像数据
2 由BYTE*得到IplImage*图像数据
iplImage = cvCreateImageHeader(cvSize(width,height),depth,channels);
cvSetData(iplImage,data,step);
// 转载自这个博客:http://blog.youkuaiyun.com/scudz/article/details/8083866 里面讲的比较清楚
但是我还是没有弄明白 :cvCreateImageHeader 与之前的cvCreateImage 的区别在哪里:
vector 跟deque 的区别在哪里
vector 是一直自增的一个向量,当视频实时处理时, 会一直自增。会溢出而死/
deque 是一个循环队列(?),但是我可以设置长度,比如deque.size() 的尺寸大于一个数时,我们就把前面的数据pop掉。逻辑关系是 deque.pop_front() 然后在deque.push_back() 这样
想清楚了 心灵就自由