opencv视频逐帧提取,然后图像叠加得出一个图像要用到啥函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv视频逐帧提取,然后图像叠加得出一个图像要用到啥函数?相关的知识,希望对你有一定的参考价值。

参考技术A 初始化时使用
CvCapture *capture;
IplImage *imgV;
IplImage *img1,*img2;
capture = cvCreateCameraCapture(CV_CAP_VFW);

取每帧
cvGrabFrame(capture );
imgV = cvRetrieveFrame( capture);
img1 = cvCloneImage(imgv);

cvGrabFrame(capture );
imgV = cvRetrieveFrame( capture);
img2 = cvCloneImage(imgv);

叠加
cvAddWeighted(img1,0.5,img2,0.5,1.0,img1);追问

cvAddWeighted用于两幅图片的融合 可是我想提取的帧全部叠加 可以设置一个for循环进行叠加吗?

追答

可以
两幅图片直接叠加,或多幅直接叠加,亮度会溢出,所以用加权,每幅图像加权值 0.5
上面的例子是 图像1 图像2 加权后 放入 图像1
你再用图像2 取第三幅,与图像1叠加
循环,加多少都可以

追问

恩谢谢了 我们老师让我逐帧提取变化像素点...所以我又要重新搞了..

本回答被提问者采纳
参考技术B C++还是C#追问

c++

OpenCV 无需压缩/更改即可读取视频/图像

【中文标题】OpenCV 无需压缩/更改即可读取视频/图像【英文标题】:OpenCV read Videos/Images without compression/change 【发布时间】:2016-09-27 14:14:13 【问题描述】:

我目前正在用 C++ 编写视频分割程序,并希望使用 opencv 逐帧读取视频。 尽管它似乎工作得很好,但我在读取(和写入)图像时注意到了一些细微的变化。 我读取和写入图像的代码基本上如下(尽管我通常会继续使用创建的图像矩阵):

Videocapture cap = VideoCapture(filename);
int counter = 0;
while(1) 
    Mat tmp;
    cap >> tmp;
    if(tmp.empty()) 
    //cout << "scanned all frames" << endl;
    break;
    
    //save frames as jpeg
    stringstream filename;
    filename << "original" << counter;
    counter++;

这些代码可以很好地工作,但是颜色会发生一些细微的变化,我想消除这些变化。 这是源图像(放大): https://picload.org/image/rdddagor/source.png

这是创建的(也放大了): https://picload.org/image/rdddagir/opencv.png

有没有办法保持原始图像质量?

【问题讨论】:

您是否将图像保存为 jpeg? 哦,你是对的。愚蠢的我。不幸的是,这意味着我的代码中的其他地方有错误(但与这个问题无关)。感谢您的帮助! 【参考方案1】:

正如@Miki 所说,我只需将图像保存为“.png”(或任何其他无损格式)。

【讨论】:

以上是关于opencv视频逐帧提取,然后图像叠加得出一个图像要用到啥函数?的主要内容,如果未能解决你的问题,请参考以下文章

想要在 AVPlayer 中播放视频时逐帧提取视频中的所有图像

在 Android 上的 OpenCV 中逐帧处理视频

opencv 提取avi视频中的帧,逐帧播放

如何提取视频中一帧图片

opencv函数如何把视频图像中运动的物体给框住

在opencv中读取视频文件的连续图像