繁体   English   中英

Python OpenCV 多处理 cv2.VideoCapture mp4

[英]Python OpenCV multiprocessing cv2.VideoCapture mp4

我想在一个进程中运行一些mp4视频,但只有相机提要有效。 该软件卡住,没有错误消息。 我已经尝试过两者,但发现它无法运行。 打印是代码卡住的地方。

import cv2
import multiprocessing

dispW=640
dispH=480

# Camera inputs 

cap=cv2.VideoCapture('/home/kc/Downloads/darknet/1.mp4')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, dispW)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, dispH)

#cv2.namedWindow("Window")

def c1():
    global cap
    while True:
        print('here')
        success, img = cap.read()
        #ret, frame1 = cap1.read()
        #frame2 = numpy.hstack((frame,frame1))
        print('here')
        cv2.imshow("Window2", img)

        #This breaks on 'q' key
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

tCap1 = multiprocessing.Process(target=c1)
tCap1.start()

这运行。

import cv2
import multiprocessing

dispW=640
dispH=480

# Camera inputs 

cap=cv2.VideoCapture('/dev/video0')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, dispW)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, dispH)


#cv2.namedWindow("Window")
def c1():
    global cap
    while True:
        success, img = cap.read()
        #ret, frame1 = cap1.read()
        #frame2 = numpy.hstack((frame,frame1))
        print('here')
        cv2.imshow("Window2", img)

        #This breaks on 'q' key
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

tCap1 = multiprocessing.Process(target=c1)
tCap1.start()

我需要一个以多处理方式运行的 mp4 文件示例。

这是一个带有可选 FPS 控制的最小工作示例。 如果您需要从您的进程中提取帧返回到主程序,您可以使用multiprocessing.Queue()来传输帧,因为多进程有一个独立的 memory 堆栈。

import multiprocessing as mp
import cv2, time

def capture_frames():
    src = 'test.mp4'
    capture = cv2.VideoCapture(src)
    capture.set(cv2.CAP_PROP_BUFFERSIZE, 2)

    # FPS = 1/X, X = desired FPS
    FPS = 1/120
    FPS_MS = int(FPS * 1000)

    while True:
        # Ensure camera is connected
        if capture.isOpened():
            (status, frame) = capture.read()
            
            # Ensure valid frame
            if status:
                cv2.imshow('frame', frame)
            else:
                break
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
            time.sleep(FPS)

    capture.release()
    cv2.destroyAllWindows()

if __name__ == '__main__':
    print('Starting video stream')
    capture_process = mp.Process(target=capture_frames, args=())
    capture_process.start()

相关摄像头/IP/RTSP/流、FPS、视频、线程和多处理帖子

  1. Python OpenCV 从相机流式传输 - 多线程,时间戳

  2. 使用 OpenCV cv2.VideoCapture 从 Python 中的 IP 摄像头流式传输视频

  3. 如何使用 OpenCV 捕获多个摄像头流?

  4. OpenCV 实时流视频采集速度慢。 如何丢帧或与实时同步?

  5. 使用 OpenCV VideoWriter 将 RTSP stream 存储为视频文件

  6. OpenCV 视频保存

  7. Python OpenCV 多处理 cv2.VideoCapture mp4

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM