所以我已经按照本教程,但似乎没有做任何事情.什么都没有.它等待几秒钟然后关闭程序.这段代码有什么问题?
import cv2
vidcap = cv2.VideoCapture('Compton.mp4')
success,image = vidcap.read()
count = 0
success = True
while success:
success,image = vidcap.read()
cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file
if cv2.waitKey(10) == 27: # exit if Escape is hit
break
count += 1
Run Code Online (Sandbox Code Playgroud)
另外,在评论中它说这会将帧限制为1000?为什么?
编辑:我尝试先做success = True,但没有帮助.它只创建了一个0字节的图像.
我正拼命地让OpenCV在Windows 7上运行.我下载并安装它,它没有用,我得到了
ImportError: No module named opencv
Run Code Online (Sandbox Code Playgroud)
当我试图运行其中一个样本时.我谷歌我的问题,只得到无效的随机解决方案.任何人都可以指导我安装它,或者知道我可以在哪里获得编程菜单的清晰安装指南设计.
做其他事情时,opencv工作正常.它可以打开图像并显示图像.但它无法打开视频.
我用来打开视频的代码如下
import cv2
cap = cv2.VideoCapture("MOV_0006.mp4")
while True:
ret, frame = cap.read()
cv2.imshow('video', frame)
if cv2.waitKey(1) & 0xff == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
但是在执行时,它会输出如下所示的错误消息
[h264 @ 0x1053ba0] AVC: nal size 554779904
[h264 @ 0x1053ba0] AVC: nal size 554779904
[h264 @ 0x1053ba0] no frame!
Run Code Online (Sandbox Code Playgroud)
我vlc和mplayer可播放该视频,但OpenCV的不能.
我已经安装了x264和libx264-142编解码器包.(使用sudo apt-get install)
我的ubuntu版本是14.04 trusty.
我不确定它是否是编解码器问题?
我用WITH_UNICAP=ON或用了重建opencv WITH_UNICAP=OFF,但它根本不会影响问题.错误消息永远不会改变.
我最近在Ubuntu 12.04中安装了OpenCV 2.4.2.
cap = VideoCapture(0)
Run Code Online (Sandbox Code Playgroud)
工作中.但我无法从某些视频源中获取帧.
cap = VideoCapture("input.avi")
img = cap.read()
Run Code Online (Sandbox Code Playgroud)
给了我一个零元素的numpy.
我还安装了ffmpeg 0.11,x264的最新快照,v4l-0.8.8(所有都是最新的稳定版本)
cmake -D WITH_QT=ON -D WITH_FFMPEG=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_EXAMPLES=OFF WITH_V4L=ON ..
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
当我做cmake时,我明白了
- 检测到的GNU GCC版本:46(406)
- 找到OpenEXR:/usr/lib/libIlmImf.so
- 寻找linux/videodev.h
- 寻找linux/videodev.h - 找不到
- 寻找linux/videodev2.h
- 寻找linux/
videodev2.h - 找到- 寻找libavformat/avformat.h
- 寻找libavformat/avformat.h - 找到
- 寻找ffmpeg/avformat.h
- 寻找ffmpeg /avformat.h - 未找到
- 检查模块'tbb'
- 找不到包'tbb'
和
-- Video I/O:
-- DC1394 1.x: NO
-- DC1394 2.x: YES …Run Code Online (Sandbox Code Playgroud) Python程序中的所有路径都可以使用".."(对于父目录)和/(用于分隔路径组件),并且仍然可以在平台上运行吗?
一方面,我从未在文档中看到过这样的说法(我可能已经错过了它),os和os.path模块确实提供了以平台无关的方式处理路径的工具(os.pardir,os.path.加入,...),这让我觉得他们在这里是有原因的.
另一方面,您可以在StackOverflow上阅读 "../path/to/file"适用于所有平台......
因此,为了便于携带,是否应始终使用os.pardir,os.path.join和朋友,或者Unix路径名是否始终安全(最多可能出现字符编码问题)?或者"几乎总是"安全(即在Windows,OS X和Linux下工作)?
我在Windows XP 32位下使用OpenCV 2.4.2的VideoCapture类时遇到问题.它没有打开任何文件或相机,并修复它是一个痛苦.我正在使用visual studio 2010,但我也在QTcreator中尝试了相同的结果.
测试代码如下:
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
using namespace cv;
using namespace std;
int main()
{
const char* videoPath = "C:/video/";
string videoName = string(videoPath) + "avi.avi";
VideoCapture cap(videoName);
if(!cap.isOpened())
{
std::cout<<"Fail"<<std::endl;
return -3;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出始终为"-3".Qt Creator显示警告:打开文件时出错(../../modules/highgui/src/cap_ffmpeg_impl.hpp:361)
我调试了它,问题出现在第一行:
CvCapture* cvCreateFileCapture_FFMPEG_proxy(const char * filename)
{
CvCapture_FFMPEG_proxy* result = new CvCapture_FFMPEG_proxy;
if( result->open( filename ))
return result;
delete result;
#if defined WIN32 || defined _WIN32
return cvCreateFileCapture_VFW(filename); …Run Code Online (Sandbox Code Playgroud) 参考这个类似的问题How to parse mjpeg http stream from ip camera? 我能够使用requests以下命令从 IP 摄像机读取流:
stream = requests.get('http://<user>:<pass>@<addr>:<port>/videostream.cgi', stream=True)
bytez = ''
while True:
bytez += stream.raw.read(16384)
...
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但想通过使用cv2.VideoCapture()请求来实现。
我尝试了以下方式的变化:
cap = cv2.VideoCapture()
cap.open('http://<user>:<pass>@<addr>:<port>/videostream.cgi?.mjpg')
while(True):
ret, frame = cap.read()
...
Run Code Online (Sandbox Code Playgroud)
但无法得到任何东西,但关于空帧的异常。
如何使用 cv2.VideoCapture() 读取 IP 摄像机流?
使用这个 api,我成功下载了流数据,但我不知道如何解析它。我查看了 RMTP 格式,但似乎不匹配。
from livestreamer import Livestreamer
livestreamer = Livestreamer()
# set to a stream that is actually online
plugin = livestreamer.resolve_url("http://twitch.tv/froggen")
streams = plugin.get_streams()
stream = streams['mobile_High']
fd = stream.open()
data = fd.read()
Run Code Online (Sandbox Code Playgroud)
我已在此处上传了数据示例。
理想情况下,我不必将其解析为视频,我只需要第一个关键帧作为图像。任何帮助将不胜感激!
更新:好的,我让 OpenCV 工作了,它可以抓取我拥有的随机视频文件的第一帧。然而,当我在文件中使用与流数据相同的代码时,它产生了无意义的图像。
我正在尝试使用 OpenCV 在 python 中创建一个 TimeLapse 创建器,并具有以下代码:
import cv2
import os
import string
directory = (r"C:\Users\Josh\Desktop\20130216")
video = cv2.VideoWriter(r"C:\Users\Josh\Desktop\video.avi", cv2.cv.CV_FOURCC('F','M','P', '4'), 15, (1536, 1536), 1)
for filename in os.listdir(directory):
if filename.endswith(".jpg"):
video.write(cv2.imread(filename))
cv2.destroyAllWindows()
video.release()
Run Code Online (Sandbox Code Playgroud)
该文件夹中有1,440张图片,而video.avi大小只有5.54kb,并且播放时输出为空。任何人都可以看到我的代码中的任何缺陷,并给我任何帮助吗?
opencv ×7
python ×7
video ×2
codec ×1
ffmpeg ×1
path ×1
portability ×1
python-2.7 ×1
rtmp ×1
video-codecs ×1