个人亲试:opencv videocapture无法读取视频,cap.isOpened 输出false,快速解决,出现这个先试下这个~

环境Ubuntu16.04LTS, Anacodna3安装的opencv,python3.6.8
cap.isOpened 输出false, 整个文件报错或者无法进入循环,
当然这个是由于前面的cv2.VideoCapture(filename)引起的,
最后的问题就是opencv无法读取视频,所以这个时候我去查了很多,各种环境啊什么的,
最后看到一个友人的回复,试下

 pip install opencv-contrib-python

在这里插入图片描述
然后就好了,就好了,不用想太多,先试下这个吧~

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
以下是将该代码修改为基于 Flask 和 Flask-SocketIO 的直播流媒体服务器搭建的实现: ```python import cv2 from flask import Flask, render_template from flask_socketio import SocketIO, emit app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app) cap = cv2.VideoCapture('shipin.mp4') if not cap.isOpened(): print("Error opening video file") def generate_frames(): while cap.isOpened(): ret, frame = cap.read() if not ret: break frame = cv2.resize(frame, (256, 256)) # 将帧转换为字节流 yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + cv2.imencode('.jpg', frame)[1].tobytes() + b'\r\n') @app.route('/') def index(): return render_template('index.html') @socketio.on('connect') def test_connect(): emit('my response', {'data': 'Connected'}) @socketio.on('disconnect') def test_disconnect(): print('Client disconnected') @socketio.on('stream') def handle_stream(): # 将帧作为字节流发送给客户端 for frame in generate_frames(): socketio.emit('stream', {'data': frame}, broadcast=True) if __name__ == '__main__': socketio.run(app, debug=True) cap.release() cv2.destroyAllWindows() ``` 这个示例代码创建了一个基于 Flask 和 Flask-SocketIO 的 Web 应用,通过 SocketIO 实现了直播流媒体的服务器搭建。在 `generate_frames` 函数中,通过 OpenCV读取视频文件中的每一帧,并将每一帧作为字节流生成器返回。在 `handle_stream` 函数中,通过 `socketio.emit('stream', {'data': frame}, broadcast=True)` 将帧作为字节流发送给客户端。在客户端中,可以通过 `<img src="data:image/jpeg;base64,{{ data }}">` 将接收到的字节流数据显示为图片。 需要注意的是,这个示例代码仅仅是一个简单的直播流媒体服务器搭建示例,并没有考虑到视频编码、服务器性能和带宽等方面的问题。在实际应用中,需要根据具体的需求和场景来进行相应的开发和实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值