मैंने यहां पहले से बताए गए सभी तरीकों का उपयोग करने की कोशिश की है, लेकिन उनमें से कोई भी किसी भी कारण से काम नहीं कर रहा है।

import cv2
import os
import glob



path = '.../Desktop/Plot/'
os.chdir(path)
# video_name = 'video.avi'

width=640 
height=400 
size = (width,height)

img_array = []
for filename in sorted(glob.glob(path+'*.png')):
    img = cv2.imread(path+filename+'.png')
    img_array.append(img)



out = cv2.VideoWriter('project.avi',cv2.VideoWriter_fourcc(*'DIVX'), 15, size)

for i in range(len(img_array)):
    out.write(img_array[i])
out.release()

मुझे इस कोड में कुछ भी विशेष रूप से गलत नहीं दिख रहा है, लेकिन यह केवल 6 kb फ़ाइल को उस फ़ोल्डर में डाल देता है जो नहीं चलता है।

0
wiggles8x0 18 अप्रैल 2020, 19:38

1 उत्तर

सबसे बढ़िया उत्तर

मुझे कोड में कई इंस्टेक्स दिखाई देते हैं।

1) अधिकांश सिस्टम पथ नहीं जानते ... जो आपके पास '.../Desktop/Plot/' में है और यह हो सकता है ... के बजाय .. या ../.. होना चाहिए...

2) आप सापेक्ष path - '.../Desktop/Plot/' का उपयोग करते हैं और जब आप निर्देशिका बदलने के लिए os.chdir() का उपयोग करते हैं तो वर्तमान फ़ोल्डर के साथ सापेक्ष पथ पथ बनाएगा

../Desktop/Plot/../Desktop/Plot/

और यह सही रास्ता नहीं है।

3) glob.glob(path+'*.png'), path और .png के साथ filenames बनाएगा लेकिन आप इमेज पढ़ने के लिए path और .png जोड़ते हैं में imread() - तो आपको डबल path और डौगल एक्सटेंशन के साथ फ़ाइल नाम मिलता है

 ../Desktop/Plot/../Desktop/Plot/filename.png.png

आप जो पढ़ने का प्रयास कर रहे हैं उसे देखने के लिए print(path+filename+'.png') का उपयोग करें।

बीटीडब्लू: cv2 जब यह छवि नहीं पढ़ सकता है तो त्रुटि नहीं उठाता है लेकिन यह खाली फ्रेम/छवि लौटाता है और जब आप खाली छवि को संशोधित करने का प्रयास करते हैं तो आपको त्रुटि मिल सकती है।

4) यदि छवियों का आकार 640x400 से भिन्न है तो यह खाली वीडियो बनाएगा क्योंकि जब आप वीडियो में सहेजते हैं तो यह छवियों का आकार नहीं बदलता है। फ़ाइल में सहेजने से पहले आपको छवियों का मैन्युअल रूप से आकार बदलना होगा

 img = cv2.resize(img, (width, height))

BTW कुछ डिकोडर कुछ फ़ाइल एक्सटेंशन के साथ काम नहीं करते - उदाहरण के लिए 'DIVX' टेक्स्ट के साथ फाइल में सेव नहीं करेंगे .mov

BTW आप एक for-लूप के साथ और img_array के बिना सब कुछ कर सकते हैं


मेरा संस्करण

import cv2
import os
import glob

path = '../Desktop/Plot/'

#print(os.getcwd())

width = 640 
height = 400 

out = cv2.VideoWriter('project.avi', cv2.VideoWriter_fourcc(*'DIVX'), 15, (width,height))

for filename in sorted(glob.glob(path + '*.png')):
    print(filename)

    img = cv2.imread(filename)
    img = cv2.resize(img, (width, height))

    out.write(img)

out.release()
0
furas 18 अप्रैल 2020, 17:17