关于opencv python 获取视频流的一帧

发布于 2022-09-06 04:30:47 字数 1764 浏览 38 评论 0

各位大佬:

1.我是在centos6.9系统编译的python3.6.3版本,地址是/usr/local/python3,然后使用bin文件下的pip3安装了opencv_python库
图片描述

2.在/usr/local/python3/lib/python3.6/site-packages/下生成opencv_python-3.3.0.10.dist-info和cv2目录
图片描述

3.然后使用命令运行/usr/local目录下的snapshot.py脚本文件,即:/usr/local/python3/bin/python3 snapshot.py 提示错误:

    OpenCV Error: Unknown error code -10 (Raw image encoder error: Empty JPEG image (DNL not supported)) in throwOnEror, file /io/opencv/modules/imgcodecs/src/grfmt_base.cpp, line 140
Traceback (most recent call last):
  File "snapshot.py", line 21, in <module>
    main()
  File "snapshot.py", line 11, in main
    ret,arr = cv2.imencode('.jpg', frame)
cv2.error: /io/opencv/modules/imgcodecs/src/grfmt_base.cpp:140: error: (-10) Raw image encoder error: Empty JPEG image (DNL not supported) in function throwOnEror

图片描述

请教大佬是什么原因,在windows下是可以按照程序截取到帧图片


import cv2
import numpy as np
from sys import argv
import base64

def main():
    cap = cv2.VideoCapture("rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov")
    for i in range(1, 500):
        ret,frame = cap.read()
        ret,arr = cv2.imencode('.jpg', frame)
        a = arr.tostring()
        fp = open('test'+str(i)+'.jpg', 'wb')
        fp.write(a)
        fp.close()
    fps = cap.get(5)
    print(fps)
    cap.release()

if __name__ == '__main__':
    main()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青衫负雪 2022-09-13 04:30:47

你这个报错是opencv没抽到帧所以保存成图片报错了
同样的代码我在centos6环境下测试正常


import cv2
import os
import sys

def snaprtsp(rtspurl, filename):

try:
    cap = cv2.VideoCapture(rtspurl)
    ret, frame = cap.read()
    ret, arr = cv2.imencode('.jpg', frame)
    a = arr.tostring()
    fp = open(filename, 'wb')
    fp.write(a)
    fp.close()
except Exception as e:
    print(str(e))
    cap.release()
cap.release()

if name == '__main__':

# argv1 rtsp stream url
# argv2 jpg file path and name
rtspurl = sys.argv[1]
jpgfile = sys.argv[2]
snaprtsp(rtspurl, jpgfile)
result = os.path.exists(jpgfile)
i = 1
while not result:
    if i > 3 :
        break
    snaprtsp(rtspurl, jpgfile)
    result = os.path.exists(jpgfile)
    i = i + 1
if result :
    print("Sucess")
else:
筱果果 2022-09-13 04:30:47

请问楼主解决了吗?请指教

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文