你好,我想问你一下,OpenCV如何获取前后相邻的两帧图像啊

你好,我想问你一下,OpenCV如何获取前后相邻的两帧图像啊,第1张

首先定义两个IplImage变量

IplImage

pre=NULL;

IplImage

curr=NULL;

IplImage

diff=NULL;

int

Num=0;

while(curr=

cvQueryFrame

(pCapture))

{

Num++;

if(NUm==1)

{

next=

cvCreateImage

(

cvGetSize

(curr),8,3);

diff=cvCreateImage(cvGetSize(curr),8,3);

cvCopyImage(curr,next);

}

else

{

cvAbsDiff

(curr,next,diff);

//增加对于差图的处理

cvCopyImage(curr,next);

}

}

通过这样处理后,得到的diff就是相邻两针的差图了,对于差图你要再处理,可以直接在后面添加代码。

建议还是用pyqt吧~网上很多文档,wx怎么都感觉麻烦,而且维护也不好~

况且pyqt本身的demos就可以参考到一定水平了!

第一次用pyqt做线程和sleep的时候用的是py自带的,能运行,但是经常出错

后来发现必须用qt自己那个什么模式,给你参考一下

class T_login(QtCoreQThread):

def run(self):

selfemit(QtCoreSIGNAL(loginfun(QString)),fun)

selfdologin = T_login()

selfconnect(selfdologin, QtCoreSIGNAL(loginfun(QString)), selfdo_login)

其他的都差不多

你取出前景的每一帧,然后对每一帧的处理就像对一张图像的处理一样处理。

比如你的前景设为:IplImage foreground;

那么对前景的边缘检测,滤波都跟单张图像是一样的

cvSmooth(foreground,foreground,CV_GAUSSIAN,3,3);

cvCanny(foreground,edge,30,180,3);

如果我这样说不对的话,请你把问题再描述详细一点。

我写过类似的,截取一部分你看看

这个是读取视频获得每帧图像的代码并保存

#include "stdafxh"

#include <stdioh>

#include <iostream>

using namespace std;

#include <cvh>

#include <cxcoreh>

#include <highguih>

//#pragma comment(lib, "mllib")

//#pragma comment(lib, "cvlib")

//#pragma comment(lib, "cvauxlib")

//#pragma comment(lib, "cvcamlib")

//#pragma comment(lib, "cxcorelib")

//#pragma comment(lib, "cxtslib")

//#pragma comment(lib, "highguilib")

//#pragma comment(lib, "cvhaartraininglib")

int main()

{

CvCapture capture = NULL;

IplImage frame = NULL;

char AviFileName = "e:\\Wildlifewmv";//视频的目录

char AviSavePath = "e:\\截图\\";//保存的位置

const int jiange = 4;//间隔两帧保存一次

capture = cvCaptureFromAVI(AviFileName);

cvNamedWindow("AVI player",1);

int count_tmp = 0;//计数总帧数

char tmpfile[100]={'\0'};

while(true)

{

if(cvGrabFrame(capture))

{

if (count_tmp % jiange == 0)

{

frame=cvRetrieveFrame(capture);

cvShowImage("AVI player",frame);//显示当前帧

sprintf(tmpfile,"%s//%djpg",AviSavePath,count_tmp);//使用帧号作为名

cvSaveImage(tmpfile,frame);

}

if(cvWaitKey(10)>=0) //延时

break;

++count_tmp;

}

else

{

break;

}

}

cvReleaseCapture(&capture);

cvDestroyWindow("AVI player");

std::cout<<"总帧数" << count_tmp << std::endl;

return 0;

}

获取轮廓代码

m_p_iplContourImg = cvCreateImage(cvGetSize(p_iplSrcImg),IPL_DEPTH_8U,3);

cvZero(m_p_iplContourImg);

CvMemStorage storage = cvCreateMemStorage(0);

CvSeq contour = 0;

CvSeq LocaContour = 0;

double maxaera = 3000, minaera = 800, Maxaera = 0, LocaAera = 0;

IplImage p_iplDestImgClone = cvCreateImage(cvGetSize(p_iplDestImg),8,1);

p_iplDestImgClone = cvCloneImage(p_iplDestImg) ;

//只找外部轮廓 CV_RETR_EXTERNAL

cvFindContours( p_iplDestImgClone, storage, &contour, sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

获取轮廓面积

double area = fabs(cvContourArea( contour, CV_WHOLE_SEQ )); //获取当前轮廓面积

希望对你有用

opencv读取视频,摄像头,保存视频最基础的代码

#include "cvh"

#include "highguih"

int main( int argc, char argv )

{

CvCapture capture = 0;

IplImage frame = 0;

capture = cvCaptureFromCAM( 0 );

//capture = cvCaptureFromAVI("1wmv");//播放视频 就换成这句

int fps=25; //捕捉帧率

//double fps = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //视频帧率

CvVideoWriter writer = 0; //保存就加上这句

int isColol=1;

int frameW=640;

int frameH=480;

writer=cvCreateVideoWriter("outavi",CV_FOURCC('F','L','V','1'),fps,cvSize(frameW,frameH),isColol);

cvNamedWindow( "摄像头", 1 );

//for(int i=0;i<50;i++) //2秒

for(;;) //一直读

{

frame = cvQueryFrame( capture );

cvWriteFrame(writer,frame );

cvShowImage( "摄像头", frame ); //显示一帧图像

cvWaitKey(1000 / fps);//视频速度

}

cvReleaseVideoWriter(&writer);

cvReleaseImage(&frame);

cvReleaseCapture( &capture );

cvDestroyWindow("摄像头");

return 0;

以上就是关于你好,我想问你一下,OpenCV如何获取前后相邻的两帧图像啊全部的内容,包括:你好,我想问你一下,OpenCV如何获取前后相邻的两帧图像啊、python+opencv+wxPython ,用opencv读取视频帧,将读取到的视频帧显示子wxPython控件上、opencv怎样对前景的每一帧进行 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9564058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存