1. 程式人生 > >OpenCV 呼叫攝像頭錄製指定解析度視訊----(解決儲存的視訊僅有6Kb的問題)

OpenCV 呼叫攝像頭錄製指定解析度視訊----(解決儲存的視訊僅有6Kb的問題)

1.環境資訊

win10 系統,VS2012,openCV 2.4.9,支援UVC協議的免驅動720p攝像頭

2.問題描述

攝像頭最大支援1280x960解析度,但OpenCV呼叫的時候預設的解析度是640x480。
需要呼叫攝像頭錄製1280x720的視訊。沒有報錯資訊,卻發現生成的視訊始終只有6Kb,無法播放。
程式如下

#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace
cv; void main() { VideoCapture capture(0); int framecount=0; int dWidth=1280; int dHeight=720; Size frameSize(static_cast<int>(dWidth),static_cast<int>(dHeight)); VideoWriter writer("VideoTest.avi",CV_FOURCC('P','I','M','1'),20,frameSize,true); //CV_FOURCC('I','Y','U','V') if (!capture.isOpened()) std
::cout<< "Video open failed" << endl; Mat frame; while(framecount<=50) { capture.read(frame); writer << frame; waitKey(30); framecount=framecount+1; cout<<"成功寫入視訊中,當前已寫入幀數為: "<<framecount<<endl; } capture.release(); writer.release(); return
; }

3.問題分析

視訊只有6KB,是因為只生成了avi檔案的標頭檔案,沒有真正地寫入影象資訊。
自然的懷疑是Videowriter()中設定的編碼FOURCC的問題
修改不同的編碼格式,始終只有6KB。
經過仔細分析,發現問題在於視訊尺寸上。
Videowriter的尺寸設定為了1280*720,而capture讀取的影象尺寸仍然是預設尺寸,沒有修改,所以視訊不能正常儲存
新增兩句修改capture尺寸的即可。

capture.set(CV_CAP_PROP_FRAME_WIDTH,1280);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,720);

修改後部分如下

Mat frame;
capture.set(CV_CAP_PROP_FRAME_WIDTH,1280);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,720);
while(framecount<=50)
{
    capture.read(frame);
    writer << frame;
    waitKey(30);
    framecount=framecount+1;
    cout<<"成功寫入視訊中,當前已寫入幀數為: "<<framecount<<endl;

}
    capture.release();  
    writer.release();  
    cvDestroyAllWindows();   
    return ;   
}

4.問題總結

openCV 呼叫攝像頭錄製視訊很簡單,但是生成視訊只有6Kb這種失誤情況,網上講的不是很多。
所以剛開始以為問題出在視訊解碼上,花了一些無用功。
雖然是小問題,但記錄一下,希望遇到同樣情況的朋友可以參考一下,少花些功夫。

相關推薦

OpenCV 呼叫攝像頭錄製指定解析度視訊----解決儲存視訊6Kb的問題

1.環境資訊 win10 系統,VS2012,openCV 2.4.9,支援UVC協議的免驅動720p攝像頭 2.問題描述 攝像頭最大支援1280x960解析度,但OpenCV呼叫的時候預設的解析度是640x480。 需要呼叫攝像頭錄製1280x72

Qt使用opencv呼叫攝像頭錄製視訊儲存檔案

首先需要說的是我的筆記本攝像頭是WebCam SCB-0355N,因為按照網上的方法錄製的視訊一直無法開啟,後來想到可能跟攝像頭錄製格式有關,於是用系統自帶的錄製軟體錄製並儲存,發現儲存的是.wmv檔案

OpenCV學習筆記_呼叫攝像頭錄製視訊(無聲音)

#include <cv.h> #include <highgui.h> using namespace std; int main(void){ cvNamedWind

樹莓派3 opencv呼叫攝像頭C++和Python

安裝環境 : ubuntu 16.04 樹莓派利用基於C++的opencv的CaptureVideo函式呼叫外部攝像頭,比如usb攝像頭等是沒有問題的,但是無法呼叫自帶的攝像頭,因此需喲通過呼叫其他的函式或者改變自帶CSI攝像頭的屬性設定才可以獲取實時

Python+Opencv呼叫攝像頭實現人臉識別並儲存視訊儲存空檔案問題解決

前言 本文介紹了利用Python+Opencv實現呼叫攝像頭、進行人臉識別、並儲存為avi格式視訊的程式方法。至於python+opencv測試環境的搭建,回頭再開一個帖子進行介紹。 前期配置 Python2.7+Opencv2.4.13 實現過程 先貼程式碼:

利用python OpenCV呼叫攝像頭模組

import cv2 import numpy as np cap = cv2.VideoCapture(0) while(1): # get a frame ret, frame = cap.read() # show a frame cv2.imshow("ca

python+openCV呼叫攝像頭拍攝和處理圖片

在深度學習過程中想做手勢識別相關應用,需要大量採集手勢圖片進行訓練,作為一個懶人當然希望飛快的連續採集圖片並且採集到的圖片就已經被處理成統一格式的啦。。於是使用python+openCV呼叫攝像頭,在採

Python OpenCV 呼叫攝像頭並截圖儲存

0x01 OpenCV安裝   通過命令pip install opencv-python 安裝 pip install opencv-python 0x02  示例 import cv2 cap = cv2.VideoCapture(0) #開啟攝像

python-opencv呼叫攝像頭

你可以使用函式 cap.get(propId) 來獲得視訊的一些引數資訊。這裡propId 可以是 0 到 18 之間的任何整數。每一個數代表視訊的一個屬性,見下表其中的一些值可以使用 cap.set(propId,value) 來修改, value 就是你想要設定成的新值。例如,我可以使用 cap.get

OpenCV呼叫攝像頭 , 人臉檢測demo

github部落格傳送門 csdn部落格傳送門 環境: 安裝OpenCV: conda install opencv 或 pip install opencv 安裝PIL: conda install pillow pip install pillow 效果: 所需檔案: 下載連結: 所需檔案

使用OpenCV呼叫攝像頭檢測人臉並截圖-Python

使用OpenCV呼叫攝像頭檢測人臉並連續截圖100張 #-*- coding: utf-8 -*- # import 進openCV的庫 import cv2 ###呼叫電腦攝像頭檢測人臉並

Ubuntu16.04下opencv呼叫攝像頭的程式

配置opencv可以參考http://jingyan.baidu.com/article/14bd256e466474bb6d2612db.html //test.cpp原始檔 #include<opencv2/opencv.hpp> #include<

Opencv呼叫攝像頭採集影象

首先需要提起學習者的興趣: #include<opencv2/opencv.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp>

使用Opencv呼叫攝像頭失敗的解決辦法

這幾天參考《OpenCV3程式設計入門》書中的--呼叫攝像頭採集影象的程式碼進行程式設計,可是程式碼照著書上的打完了,進行編譯的時候竟然報錯了,於是乎就在網上查詢錯誤的解決辦法,一開始是以為自己的驅動沒裝好,我就從裝攝像頭驅動了,裝完後發現還是不行,網上很多方法我都試了,結

[opencv] 將攝像頭影象做映象變換split, merge, 矩陣相乘

攝像頭採集到的影象進行映象變換,最簡單的方法是逐點掃描然後重新賦值給一個新的矩陣。但是一張普通質量的影象也有十萬級個畫素點,這種方式做映象變換,速度應該會很慢。 但是如果可以以矩陣的方式進行處理,訪問影象更快,程式執行的速度也就更快。 以矩陣的方式操作原理如

用python opencv 呼叫攝像頭之if cv2.waitKey(1) & 0xFF == ord('q')分析

while(1)迴圈內不斷採集影象幀並顯示,並進行按鍵 ‘q’ 的檢測,語句段如下: while(True): ret,frame = cap.read() gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY

SHELL編程練習-復制指定文件保持文件所在目錄結構

file 文件 同文件 amp bash don etc shel done cep 1. 目的將/root 目錄下的所有大於1M(可自定義) 的文件拷貝到 /tmp/BakDir(可自定義) 目錄,需要保持目錄結構。例如 /root/reed.file 文件大小為 12M

18、OpenCV Python 簡單實現一個圖片生成類似抖音生成字母人像

gaussian int read 。。 str gray clas range TE 1 __author__ = "WSX" 2 import cv2 as cv 3 import numpy as np 4 5 def local_threshold(i

深度學習——deepNN模型實現攝像頭實時識別人臉表情C++和python3.6混合程式設計

一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

如何在eclipse的配置檔案裡指定jdk路徑即配置啟動eclipse的JDK

  如何在eclipse的配置檔案裡指定jdk路徑(即配置啟動eclipse的JDK) 2017年01月25日 03:26:08 閱讀數:21751 標籤: eclipsejdk 更多 個人分類: eclipse 版權宣告: