2017-09-21 2 views
0

비디오를 프레임으로 변환하려면 아래 코드를 실행하고 있습니다. 문제는 0 KB 크기의 이미지 파일을 만드는 것이고 아무 것도 표시하지 않을 때입니다. 문제가 무엇인지 이해하지 못합니다. 이미지 코덱을 설치해야합니까?openCV imwrite 쓰기 0 KB 이미지 프레임

''' 
    Using OpenCV takes a mp4 video and produces a number of images. I am using OpenCV 3.3.0 version and Python 2.7 


    Which will produce a folder called data with the images, There will be 2000+ images for example.mp4. 
    ''' 
    import cv2 
import numpy as np 
import os 

# Playing video from file: 

try: 
     cap = cv2.VideoCapture('aa.mkv') 
except: 
     print "Could not open video file" 
     raise 
print cap.grab() 

try: 
    if not os.path.exists('data'): 
     os.makedirs('data') 
except OSError: 
    print ('Error: Creating directory of data') 

currentFrame = 0 
while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    if not frame is None: 
     # Saves image of the current frame in jpg file 
     name = './data/frame' + str(currentFrame) + '.jpg' 
     print ('Creating...' + name) 
     cv2.imwrite(name, frame) 
     #cv2.imshow(name, frame) 
    else: 
     break 

    # To stop duplicate images 
    currentFrame += 1 

# When everything done, release the capture 
cap.release() 
cv2.destroyAllWindows() 
+2

imwrite 명령은 어디에 있습니까? –

+0

'프레임'을 확인하면 그 프레임이 비어 있음을 알 수 있습니다. 또는'ret'를 검사하여'False '라는 것을 볼 수 있습니다. 즉 프레임이 읽히지 않았습니다. –

+0

ret도 반환하지 않습니다. –

답변

1

프레임을 쓰는 데 imwrite 함수를 사용하고 있지 않습니다. 또한 imshow 함수 이름의 철자가 잘못되었습니다. 귀하의 코드를 변경했습니다. 사용해보기 :

import cv2 
import numpy as np 
import os 

# Playing video from file: 
cap = cv2.VideoCapture('aa.mkv') 

try: 
    if not os.path.exists('data'): 
     os.makedirs('data') 
except OSError: 
    print ('Error: Creating directory of data') 

currentFrame = 0 
while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    if not frame is None: 
     # Saves image of the current frame in jpg file 
     name = './data/frame' + str(currentFrame) + '.jpg' 
     print ('Creating...' + name) 
     cv2.imwrite(name, frame) 
     cv2.imshow(name, frame) 
    else: 
     break 

    # To stop duplicate images 
    currentFrame += 1 

# When everything done, release the capture 
cap.release() 
cv2.destroyAllWindows() 
+0

나는 OP가 어떤 점에서 코드에서'imwrite'를했다고 추측 할 것입니다. 그리고 그것은'w'가 나온 곳입니다. –

+0

이 오류가 발생합니다.cv2.error : C : \ build \ master_winpack-bindings-win32-vc14-static \ opencv \ modules \ highgui \ src \ window.cpp : 325 : 오류 : (-215) size.width> 0 && size.height> 0에서 함수 cv :: imshow –

+0

나는 코드를 변경했다. 이제 확인해보십시오. 또한 비디오 경로가 올바른지 확인하십시오. – Jazz