2017-08-10 669 views
0

我嘗試用這種方式更改視頻分辨率(使用mp4!)(至800x600):但它不起作用,當我使用cap.get(3)和(4)時,時間defualt 1280x720!python cv2視頻分辨率

import cv2 
cap = cv2.VideoCapture('file') 
while(cap.isOpened()): 
    cv2.waitKey(10) 

    ret, frame = cap.read() 
    cap.set(3, 800) 
    cap.set(4, 600) 

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA) 
    print cap.get(3) # return default 1280  

    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows() 

我在做什麼錯?

我試過 -

cv2.resizeWindow("ssss", 300, 300), 

cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600) 
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800) 

沒有效果!

+0

嘗試用你的攝像頭由cv2.VideoCapture(0)它給你800不是1280 – Kallz

+1

帶攝像頭的工作,改變文件! - mp4 – TheRutubeify

+1

@TheRutubeify如果您在Stack OverFlow上找到答案。你應該遵守這些規則。 https://stackoverflow.com/help/someone-answers。如果你知道這個問題的答案。你應該在Answer面板中給出答案。不要在問題面板中給出答案。 – Rex

回答

2
import cv2 
cap = cv2.VideoCapture(0) 
while(cap.isOpened()): 
    cv2.waitKey(10) 

    ret, frame = cap.read() 
    cap.set(3, 800) 
    cap.set(4, 600) 

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA) 
    print cap.get(3) # return default 1280  

    cv2.imshow('frame',gray) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

cap.release() 
cv2.destroyAllWindows() 

這是你的代碼工作與webcame,不與文件

的視頻文件,你可以調整窗口的大小

cv2.resizeWindow(winname, width, height) 

爲先定義窗口的名稱和調整其大小

示例

cv2.namedWindow("frame", 0); 
    cv2.resizeWindow("frame", 800,600); 

for Detail resize window

+0

如何使用它? cv2.resizeWindow(「cap」,300,300)在循環中?我試過這種方式,沒有改變( – TheRutubeify

+0

它剛剛打開新的「空白」空頭窗口「最終」 – TheRutubeify

+1

@TheRutubeify cv2.imshow('框架',灰色)行改爲cv2.imshow('最後',灰色) – Kallz

0

我認爲你的代碼中有一些可能需要注意的事情。

  1. 正如OpenCV documentationVideoCapture描述的,如果你要訪問您的默認攝像頭,你需要初始化類,如下所示:

    cap = cv2.VideoCapture('file') 
    

    如果你試圖再更改相機的分辨率,我建議移動這兩個set線,在cap的初始化的正下方,並且只執行一次 - 不是每次在幀中讀取。您還可以使用常數來訪問正確的屬性:

    cap = cv2.VideoCapture('file') 
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, width) 
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height) 
    
    # Your while loop and the rest of the code... 
    
  2. 如果你正試圖從一個文件中讀取幀,並想改變它的分辨率,你可能想使用resize方法描述here 。這需要在循環內部完成,在您讀入框架之後。這可能是這樣的:

    resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC); 
    

我希望這有助於。

+0

我試過cap.set(cv2.CAP_PROP_FRAME_WIDTH,800)cap.set(cv2.CAP_PROP_FRAME_HEIGHT,600)它沒有幫助! – TheRutubeify

+0

它和我上面寫的一樣 - cap.set(3,800)和cap.set(4,600)! – TheRutubeify

-1

解決:

cv2.namedWindow("framename", 0) 
cv2.resizeWindow("framename", 800, 600) 
cv2.imshow('framename',gray) 
+0

終於你複製粘貼我的答案最後作爲您的回答 – Kallz

+0

是的,您的答案,我只是把它放在答案!我需要做什麼? – TheRutubeify

+1

@TheRutubeify當答案解決您的問題時,您可以點擊複選標記接受它並給出upvote。複製內容並重新發布。 –

相關問題