2017-06-18 37 views
0

我看不到任何輸出視頻窗口,當我運行的代碼。 Python代碼:無法顯示從.avi文件在OpenCV中(蟒蛇)視頻輸出

import cv2 
import numpy as np 

#cap = cv2.VideoCapture(0) 
cap = cv2.VideoCapture('C:\Users\khan1\Desktop\pythonproject\test_1.avi') 
print cap 
while (cap.isOpened()): 
    _, frame = cap.read() 
    hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
    lower_green = np.array([65, 60, 60]) 
    upper_green = np.array([80, 255, 255]) 
    mask = cv2.inRange(hsv, lower_green, upper_green) 
    res = cv2.bitwise_and(frame, frame, mask=mask) 

    cv2.imshow('frame', frame) 
    cv2.imshow('mask', mask) 
    cv2.imshow('res', res) 

    k = cv2.waitKey(1) & 0xFF 
    if k == 27: 
     break 

cv2.destroyAllWindows() 
cap.release() 

當我運行它,我得到Process finished with exit code 0但它並不顯示任何視頻。如果我使用cap = cv2.VideoCapture(0)作爲攝像頭,此代碼可正常顯示3個不同的視頻窗口。另外print cap顯示<VideoCapture 034523B0>。我究竟做錯了什麼?

+0

添加視頻路徑雙斜線 – Anonymous

+0

其中路徑明確添加雙斜線? – sayem48

+0

將路徑更改爲C:\\ Users \\ khan1 \\ ...或者將視頻複製到項目文件夾,並簡單地傳遞視頻名稱 – Anonymous

回答

0

咱們過去提供的代碼,因爲這是輸出什麼應該被期待。

這條線被激活你的主攝像頭。如果你只有一個攝像頭插入你的機器,那麼這應該沒問題。

cap = cv2.VideoCapture(0) 

接下來的循環只是捕捉你的攝像頭的幀,直到你按Escape鍵。你得到三個窗口,因爲你正在運行的imshow函數三次:通過攝像頭無需修改

cv2.imshow('frame', frame) 
cv2.imshow('mask', mask) 
cv2.imshow('res', res) 

frame變量存儲正常幀。 mask變量基於提供的值範圍運行顏色閾值,在此情況下,該值是範圍在lower_greenupper_green之間的範圍。變量res將在正常幀的頂部顯示掩碼,因此會顯示bitwise_and運算符。

注意,對於OpenCV的默認顏色格式爲BGR(藍,綠,紅),且將其轉換爲HSV值,這就是爲什麼你可能得到兩個黑色的屏幕。

變化的顏色閾值,直到你得到一個更好的結果,或嘗試這個代碼,這將掩蓋任何事情不能遠程的綠色價值。

import cv2 
import numpy as np 

cap = cv2.VideoCapture(0) 
#cap = cv2.VideoCapture('C:\Users\khan1\Desktop\pythonproject\test_1.avi') 
print cap 
while (cap.isOpened()): 
    _, frame = cap.read() 
    rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 
    lower_green = np.array([0, 60, 0]) 
    upper_green = np.array([200, 255, 200]) 
    mask = cv2.inRange(rgb, lower_green, upper_green) 
    res = cv2.bitwise_and(frame, frame, mask=mask) 

    cv2.imshow('frame', frame) 
    cv2.imshow('mask', mask) 
    cv2.imshow('res', res) 

    k = cv2.waitKey(1) & 0xFF 
    if k == 27: 
     break 

cv2.destroyAllWindows() 
cap.release() 

你會注意到,在提供的代碼中,我將它轉換爲RGB格式而不是HSV。

+0

感謝您爲我解釋此代碼。但我的問題是爲什麼我不能讀取存儲在筆記本電腦上的視頻文件(test_1.avi)?其實我沒有看到任何屏幕。它可以在網絡攝像機上正常工作,但無法從上述路徑中讀取視頻文件。另外BGR2RGB的建議也很有幫助。 – sayem48

+0

這很可能是一個編解碼器問題。 – avereux

+0

我該如何解決這個問題?是否有任何已知的鏈接可以解決此問題? – sayem48