OpenCV: расчет оптического потока в трубе с Гуннаром ФарнебакомPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 OpenCV: расчет оптического потока в трубе с Гуннаром Фарнебаком

Сообщение Anonymous »

Я хотел бы рассчитать оптический поток на видео эндоскопии трубы. Я бы использовал оптический поток cv2 Farneback для расчета оптического потока. С помощью оптического потока я хотел бы рассчитать движение эндоскопа (вперед или назад). Мой видеокадр выглядит так:
Изображение
Мои результаты выглядят так при этом изображение оптического потока всегда черное, есть идеи, почему?
Изображение
< /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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»