Mengekstrak Gambar dari Video dengan OpenCV pada Python

Muti
2 min readAug 9, 2021

--

Photo by Jakob Owens on Unsplash

Video dapat diolah dan digunakan sebagai dataset gambar untuk berbagai project machine learning atau neural network.

Untuk mengambil gambar-gambar dari sebuah video, kita dapat menggunakan OpenCV. OpenCV merupakan open-source library yang banyak digunakan dalam computer vision, machine learning dan image processing. Jadi saat berhadapan dengan project terkait image, besar kemungkinan akan menggunakan library ini.

Install Library

Pada artikel ini kita akan menggunakan library OpenCV pada Python. Secara umum untuk menginstall bisa menggunakan pip.

pip install opencv-python

Instruksi untuk instalasi selengkapnya bisa dilihat pada site https://pypi.org/project/opencv-python/.

Load video

Langkah pertama yang dilakukan adalah me-load video yang akan kita ekstrak gambarnya. Kita dapat me-load video dengan fungsi VideoCapture() dari OpenCV dengan path video yang akan diproses.

video = cv2.VideoCapture(video_path)

Mengambil frames

Setelah video di-load, maka kita akan membaca video dengan fungsi read(). Fungsi ini akan mengambil frame by frame dari video. ret akan bernilai False saat frame selanjutnya tidak ada lagi.

ret, frame = video.read()
if ret == False:
break

Color space RGB dan release

Ambil frame dan simpan dalam sebuah array. Frame yang diekstrak secara default adalah dalam format BGR, ubah format color space menjadi RGB.

frames = []
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frames.append(frame)

Release video setelah frame selesai diekstrak.

video.release()

Numpy array

Jika gambar/frame yang telah diekstrak akan digunakan sebagai data untuk machine learning, sebaiknya frames diubah menjadi numpy array.

np.array(frames)

Kode selengkapnya:

def extract_frames(video_path):
# Load video
video = cv2.VideoCapture(video_path)
# Loop all frames
frames = []
while(video.isOpened()):
ret, frame = video.read()
if ret == False:
break

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frames.append(frame)

video.release()

# return as numpy array
return np.array(frames)

--

--

No responses yet