網(wǎng)站首頁 編程語言 正文
介紹
本文將介紹基于OpenCV實(shí)現(xiàn)視頻的循環(huán)播放。
有以下三個(gè)步驟:
- 首先設(shè)置一個(gè)frame的設(shè)置參數(shù)frame_counter,值為0
- 在讀幀時(shí)間,將每次加一
- 當(dāng) frame_counter 達(dá)到視頻總幀數(shù)時(shí),將當(dāng)前的幀設(shè)置為 0
視頻總幀數(shù):CAP_PROP_FRAME_COUNT
設(shè)置當(dāng)前的幀:CAP_PROP_POS_FRAMES
VideoCaptureProperties通用屬性標(biāo)識(shí)符參考地址。
1.Python+OpenCV實(shí)現(xiàn)
import cv2 cap = cv2.VideoCapture("001.mp4") frame_counter = 0 while (cap.isOpened()): ret, frame = cap.read() frame_counter += 1 if frame_counter == int(cap.get(cv2.CAP_PROP_FRAME_COUNT)): frame_counter = 0 cap.set(cv2.CAP_PROP_POS_FRAMES, 0) cv2.imshow("frame", frame) key = cv2.waitKey(1) # ESC if key == 27: break cap.release() cv2.destroyAllWindows()
2.C++ + OpenCV實(shí)現(xiàn)
#include#include #include int main() { cv::Mat frame; cv::VideoCapture cap("001.mp4"); int frame_counter = 0; while (true) { cap >> frame; if (!frame.data) { printf("Image not loaded"); return -1; } frame_counter += 1; if (frame_counter == int(cap.get(cv::CAP_PROP_FRAME_COUNT))){ frame_counter = 0; cap.set(cv::CAP_PROP_POS_FRAMES, 0); } cv::imshow("demo", frame); char(key)=(char)cv::waitKey(1); if(key==27) break; } return 0; }
補(bǔ)充
當(dāng)然,OpenCV不僅能實(shí)現(xiàn)視頻的循環(huán)播放,還能實(shí)現(xiàn)視頻的倒放
下面將用C語言實(shí)現(xiàn)視頻的倒放,以下是示例代碼
#include#include #include #include int main(int argc, char* argv[]) {undefined int i = 0, j = 0, k = 0; cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE); CvCapture* capture = 0; capture = cvCreateFileCapture("gr18.avi"); if (!capture) {undefined return -1; } IplImage *out = cvQueryFrame(capture);//Init the video read //用于確定幀數(shù) while ((out = cvQueryFrame(capture)) != NULL) {undefined k++; } cvReleaseCapture(&capture); capture = cvCreateFileCapture("gr18.avi"); out = cvQueryFrame(capture);//沒有它J會(huì)多一幀。 double fps = cvGetCaptureProperty( capture, CV_CAP_PROP_FPS ); CvSize size = cvSize( (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT) ); CvVideoWriter *writer = cvCreateVideoWriter( "gr13.avi", CV_FOURCC('M', 'J', 'P', 'G'), fps, size , 1 ); IplImage* logpolar_frame = cvCreateImage( size, IPL_DEPTH_8U, 3 ); //out = cvCloneImage(img); int booll = 1; while ((out = cvQueryFrame(capture)) != NULL) {undefined i = 0; j++;; booll = 0; if (j == k)//用于從第J幀開始寫入 {undefined cvShowImage("Example3", out); cvWaitKey(1); cvWriteFrame(writer, out); k--; j = 0; //重復(fù)初始化 capture = cvCreateFileCapture("gr18.avi"); out = cvQueryFrame(capture); } //j++; if (k == 0)break; } printf("||%d %d", k, j); getchar(); cvReleaseVideoWriter(&writer); cvReleaseImage(&logpolar_frame); cvReleaseCapture(&capture); //cvReleaseCapture(&capture); cvDestroyWindow("Example3"); return(0); }
原文鏈接:https://blog.csdn.net/weixin_43229348/article/details/123092505
相關(guān)推薦
- 2022-01-17 Selenium-Alert彈出框常用處理辦法
- 2022-04-10 Windows Terminal添加到右鍵菜單中
- 2022-06-02 C語言循環(huán)隊(duì)列與用隊(duì)列實(shí)現(xiàn)棧問題解析_C 語言
- 2022-12-03 Android開發(fā)數(shù)據(jù)結(jié)構(gòu)算法ArrayList源碼詳解_Android
- 2022-11-28 詳解如何使用C++寫一個(gè)線程安全的單例模式_C 語言
- 2022-07-28 Redis特殊數(shù)據(jù)類型bitmap位圖_Redis
- 2022-04-09 Spring事務(wù)管理之開啟聲明式事務(wù)
- 2022-11-17 使用python如何實(shí)現(xiàn)泛型函數(shù)_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支