
Мои результаты выглядят так при этом изображение оптического потока всегда черное, есть идеи, почему?

< /p>
import cv2
import tkinter as tk
from tkinter import filedialog
import numpy as np
import matplotlib.pyplot as plt
def select_video_file():
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(title="Video auswählen", filetypes=[("Video Dateien", "*.mp4 *.avi *.mov *.mkv *.wmv *.flv *.mpeg")])
return file_path
def horn_schunck(frame1, frame2):
# Def Optical flow
I1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY).astype(np.float32) / 255.
I2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY).astype(np.float32) / 255.
# Optical flow calculated with Gunner Farneback
#flow = cv2.calcOpticalFlowFarneback(I1, I2, None, 0.5, 3, 15, 3, 5, 1.2, 0)
flow = cv2.calcOpticalFlowFarneback(I1, I2, None, 0.5, 3, 15, 3, 5, 1.2, 0)
return flow
def main():
global flow
# Choose file
video_path = select_video_file()
# Check file
if not video_path:
print("Kein Video ausgewählt.")
return
# Video import
cap = cv2.VideoCapture(video_path)
# Cideo check
if not cap.isOpened():
print("Fehler beim Öffnen des Videos.")
return
ret, frame1 = cap.read()
if not ret:
print("Fehler beim Lesen des ersten Frames.")
return
# Frame size
height, width, _ = frame1.shape
while True:
ret, frame2 = cap.read()
if not ret:
break
# Optical flow is now calculated between two frames
flow = horn_schunck(frame1, frame2)
#draw optical flow in colors
global hsv
global rgb
hsv=np.zeros_like(frame1)
hsv[...,1]=255
mag, ang = (flow[...,0], flow[...,1])
hsv[...,0]=ang*180/np.pi/2
hsv[...,2]=cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
rgb=cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
plt.subplot(3,1,1)
plt.imshow(frame1),plt.title('frame1'),plt.xticks([]),plt.yticks([])
plt.subplot(3,1,2)
plt.imshow(frame2),plt.title('frame2'),plt.xticks([]),plt.yticks([])
plt.subplot(3,1,3)
plt.imshow(rgb),plt.title('optical flow'),plt.xticks([]),plt.yticks([])
plt.show()
frame1 = frame2
# Video-Stream release
cap.release()
if __name__ == "__main__":
main()
Подробнее здесь: https://stackoverflow.com/questions/781 ... -farneback