听说蓝洞内部检测外挂软件?居然是用Python Open写出来的!
抓取帧: IplImage* img = 0; if(!cvGrabFrame(capture)){ // 抓取一帧,失败退出 printf("Could not grab a frame "); exit(0); } img=cvRetrieveFrame(capture); // 恢复获取的帧图像 要从多个摄像头同时获取图像,首先从每个摄像头抓取一帧. 在抓取动作都结束后再恢复帧图像. 释放抓取源(和释放单幅图像时类似): cvReleaseCapture(&capture); 获取所抓取帧在视频序列中的位置,从首帧开始按[毫秒]算. 或者从首帧开始从0标号,获取所抓取帧的标号. 或者取相对位置,首帧为0,末帧为1,只对视频文件有效。 设定所抓取的第一帧标号: // 从视频文件相对位置0.9处开始抓取 cvSetCaptureProperty(capture,CV_CAP_PROP_POS_AVI_RATIO,(double)0.9); 只对从视频文件抓取有效. 不过似乎也不成功!!! 二、初始化视频存储器: CvVideoWriter *writer = 0; int isColor = 1; int fps = 25; // or 30 int frameW = 640; // 744 for firewire cameras int frameH = 480; // 480 for firewire cameras writer=cvCreateVideoWriter("out.avi",CV_FOURCC('P','I','M','1'), fps,cvSize(frameW,frameH),isColor); 其他有效编码: CV_FOURCC('P','1') = MPEG-1 codec CV_FOURCC('M','J','P','G') = motion-jpeg codec (does not work well) CV_FOURCC('M','4','2') = MPEG-4.2 codec CV_FOURCC('D','V','3') = MPEG-4.3 codec CV_FOURCC('D','X') = MPEG-4 codec CV_FOURCC('U','2','6','3') = H263 codec CV_FOURCC('I','3') = H263I codec CV_FOURCC('F','L','1') = FLV1 codec 若把视频编码设为-1则将打开一个编码选择窗口(windows系统下). 存储视频文件: 三、示例1:从视频中抓取每一帧,显示并保存 #include #include #include using namespace std; int main(){ CvCapture* capture; capture = cvCreateFileCapture("bike.avi"); assert(capture!=NULL); IplImage *frame; cvNamedWindow("camera",1); int n = 1,m = 120; char* cstr = new char[120]; while (m--) { frame = cvQueryFrame(capture); if (!frame) break; sprintf(cstr,"%s%d%s","D:OpenCVWorkSpaceideo_captureideo_capture",n++,".jpg"); cvShowImage("camera",frame); cvSaveImage(cstr,frame); if (cvWaitKey(330)>=0) break; } cvReleaseCapture(&capture); cvReleaseImage(&frame); cvDestroyWindow("camera"); return 0; } --------------------- 四、示例2:从摄像头中提取图片后并将图片重新连续播放出来。 // 该程序实现视频和图片的相互转换. // Image_to_video()函数将一组图片合成AVI视频文件. // Video_to_image()函数将AVI视频文件读入,将每一帧存储为jpg文件. // //////////////////////////////////////////////////////////////////////// #include #include #include #include #include #define NUM_FRAME 300 //只处理前300帧,根据视频帧数可修改 void Video_to_image(char* filename) { printf("------------- video to image ... ----------------n"); //初始化一个视频文件捕捉器 CvCapture* capture = cvCaptureFromAVI(filename); //获取视频信息 cvQueryFrame(capture); int frameH = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT); int frameW = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH); int fps = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); int numFrames = (int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT); printf("tvideo height : %dntvideo width : %dntfps : %dntframe numbers : %dn",frameH,frameW,fps,numFrames); //定义和初始化变量 int i = 0; IplImage* img = 0; char image_name[13]; cvNamedWindow("mainWin",CV_WINDOW_AUTOSIZE); //读取和显示 while (1) { img = cvQueryFrame(capture); //获取一帧图片 cvShowImage("mainWin",img); //将其显示 char key = cvWaitKey(20); sprintf(image_name,"image",++i,".jpg");//保存的图片名 cvSaveImage(image_name,img); //保存一帧图片 if (i == NUM_FRAME) break; } cvReleaseCapture(&capture); cvDestroyWindow("mainWin"); } void Image_to_video() { int i = 0; IplImage* img = 0; char image_name[13]; printf("------------- image to video ... ----------------n"); //初始化视频编写器,参数根据实际视频文件修改 CvVideoWriter *writer = 0; int isColor = 1; int fps = 30; // or 25 int frameW = 400; // 744 for firewire cameras int frameH = 240; // 480 for firewire cameras writer = cvCreateVideoWriter("out.avi",CV_FOURCC('X','D'),isColor); printf("tvideo height : %dntvideo width : %dntfps : %dn",fps); //创建窗口 cvNamedWindow("mainWin",CV_WINDOW_AUTOSIZE); while (i < NUM_FRAME) { sprintf(image_name,".jpg"); img = cvLoadImage(image_name); if (!img) { printf("Could not load image file...n"); exit(0); } cvShowImage("mainWin",img); char key = cvWaitKey(20); cvWriteFrame(writer,img); } cvReleaseVideoWriter(&writer); cvDestroyWindow("mainWin"); } int main(int argc,char *argv[]) { char filename[13] = "bike.avi"; Video_to_image(filename); //视频转图片 Image_to_video(); //图片转视频 return 0; } 私信小编007即可获取数十套PDF以及大量的学习资料哦!祝你早日入门哈! 五、示例3:从摄像头中提取图片,显示并保存。 由于本人不帅,所以这个程序就不贴效果图了,具体的效果自己贴到程序中测试,可以自我欣赏一下。 注意: //////////////调用摄像头///////////////// videoCapture cam; cam.open(0); /////////////设置摄像头窗口大小/////////////////// cam.set(CV_CAP_PROP_FRAM_WIDTH,600); cam.set(CV_CAP_PROP_FRAM_HEIGHT,400); /////////////获取摄像头视频中的每一帧/////////////////// cv::Mat cameraFrame; camera>>cameraFrame; //////////////存储从视频中获取的每一帧——存储路径与存储名称///////////////// char* cstr = new char[120]; sprintf(cstr,".jpg"); ///////////////openCV3.1.0中图片存储函数///////////// imwrite(cstr,cameraFrame);//这个函数很重要,与cvSaveImage()这个函数不同,存储的图片类型是cv::Mat类型的,所以要注意 --------------------- #include #include #include #include #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/ml/ml.hpp" using namespace std; using namespace cv; #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/ml/ml.hpp" using namespace std; using namespace cv; int main(int argc,char *argv[]) { int cameraNumber = 0; if (argc > 1) cameraNumber = atoi(argv[1]); VideoCapture camera; camera.open(cameraNumber); camera.set(CV_CAP_PROP_FRAME_WIDTH,600);//设置界面大小 camera.set(CV_CAP_PROP_FRAME_HEIGHT,400); if (!camera.isOpened()) { cerr << "ERROPR" << endl; exit(1); } int n = 1; while (true) { Mat cameraFrame; camera >> cameraFrame; if (cameraFrame.empty()) { cerr << "ERROR1" << endl; exit(1); } char* cstr = new char[120]; sprintf(cstr,".jpg"); imshow("Video",cameraFrame); //const CvArr* s = (CvArr*)&cameraFrame; imwrite(cstr,cameraFrame);//这个函数很重要,与cvSaveImage()这个函数不同,存储的图片类型是cv::Mat类型的,所以要注意 char key = cv::waitKey(50); if (key == 33) { break; } } } 这时就要注意,imread函数最好是放在if判断语句里面: 网上的说法: 我们用opencv打开视频的时候,会自动先监测摄像头有没有读到帧,如果没有,就会报错,然后再执行你的程序,加一个if判断就是跳过系统自己的判断,直接执行我们的程序。加上后确实可以解决错误。 if (!img_src1.empty()) { imshow("Froeground",img_src1); } else { return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |