首先定义两个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怎样对前景的每一帧进行 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)