opencv视频播放不了的问题是如何解决的?播放时一闪而过。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv视频播放不了的问题是如何解决的?播放时一闪而过。相关的知识,希望对你有一定的参考价值。

代码:
#include <highgui.h>
int main(int argc,char ** argv)

cvNamedWindow("demo02",CV_WINDOW_AUTOSIZE);

CvCapture *capture = cvCreateFileCapture("e:\y.avi");

IplImage *frame;

while(1)

frame = cvQueryFrame(capture);
if(!frame)

break;

cvShowImage("demo02",frame);

char c = cvWaitKey(30);

if(c==27)

break;


cvReleaseCapture(&capture);
cvDestroyWindow("demo02");

参照

http://www.360doc.com/content/10/1214/23/3843418_78215161.shtml

下载安装VirtualDub v1.9.4,照说明转码avi视频,转码成功的是一个很大的avi视频文件。

接下来使用的话如果可以用就好了,如果还是不能解决的话我告诉你,将取视频地址如“D:\\f.avi”换成“D:\\\\f.avi”.这大概是vc6.0的“\\”要用“\\\\”代替的,具体为什么我就不解释了,任何课本上都有的。

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include <cv.h>

#include <highgui.h>

int g_slider_position = 0;

CvCapture* g_capture = NULL;

void onTrackbarSlide(int pos)

    cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);

int main(int argc, char** argv)

int frames;

IplImage* frame;

    cvNamedWindow("D:\\\\f.avi", CV_WINDOW_AUTOSIZE);

    g_capture = cvCreateFileCapture("D:\\\\f.avi");

    frames = (int)cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);

    if(frames!=0)

        cvCreateTrackbar("D:\\\\Position.avi","D:\\\\f.avi", &g_slider_position,frames,onTrackbarSlide);

    

 

    while(1)

        frame = cvQueryFrame(g_capture);

        if(!frame) break;

        cvShowImage("D:\\\\f.avi", frame);

        if(cvWaitKey(33) >= 0) break;

        //char c = cvWaitKey(33);

        //if(c == 27) break;

    

    cvReleaseCapture(&g_capture);

    cvDestroyWindow("D:\\\\f.avi");

    return(0);

 

参考技术A cvReleaseCapture(&capture);
cvDestroyWindow("demo02");

改成

cvReleaseCapture(&capture);
cvDestroyWindow("demo02");


要把这两句在while执行完之后再进行,否则的话,你显示了第一帧,就接着就释放了资源capture和demo02,后面的当然显示不了。希望能帮到您追问

不是这个问题。
调试了一下,刚开始就执行if(!frame)

break;

跳出了。
调试中发现frame中的ID等出现Cxx0030:Error:expression cannot be evaluated

参考技术B 视频一闪而过如果程序没有错误一般可能有两个问题
1.需要下载安装XviD codec,http://www.xvidmovies.com/codec/。
2.你打开的文件是avi而且必须是XviD编码的视频文件,如果不是就要用视频转换器转换一下
参考技术C e盘根目录下有y.avi吗?追问

有的

如何使用opencv在google colab上播放视频?

【中文标题】如何使用opencv在google colab上播放视频?【英文标题】:How to play video on google colab with opencv? 【发布时间】:2020-02-15 05:41:11 【问题描述】:

我正在 google colab 上使用 Mask RCNN 进行与对象检测相关的项目。我有一个视频上传到我的 colab。我想在运行时使用openCV处理它时将它显示为视频。我想做cv2.VideoCapture('FILE_NAME') 在本地机器上做的事情。有什么办法吗?

【问题讨论】:

【参考方案1】:

我找到了方法。但是速度很慢。

from IPython.display import clear_output, Image
import base64

def arrayShow (imageArray):
    ret, png = cv2.imencode('.png', imageArray)
    encoded = base64.b64encode(png)
    return Image(data=encoded.decode('ascii'))

video_capture = cv2.VideoCapture(VIDEO_SOURCE)
while video_capture.isOpened():
    success, frame = video_capture.read()

    clear_output(wait=True)
    img = arrayShow(frame)
    display(img)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

代码无法准确播放视频。它只是显示新帧并从输出中删除旧帧。

【讨论】:

【参考方案2】:

我最近遇到了同样的问题。虽然我不相信有一种方法可以像在本地一样显示“实时”视频,但您可以做的是一次渲染一帧并将其显示在笔记本的输出中。

与 OP 的 answer 不同,它不会对图像进行编码,也不会从控制台清除前一帧。

from google.colab.patches import cv2_imshow
import cv2

# Download sample video
!curl -o sample.mp4 https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4

cap = cv2.VideoCapture('sample.mp4')
while cap.isOpened():
    ret, image = cap.read()

    if not ret:
      break

    cv2_imshow(image) # Note cv2_imshow, not cv2.imshow

    cv2.waitKey(1) & 0xff

cv2.destroyAllWindows()
cap.release()

这个notebook 可能会有所帮助,或者the code above as a notebook。

【讨论】:

我想在collab一次播放所有视频,你有那个代码sn-p吗??【参考方案3】:

你可以试试:

from google.colab.patches import cv2_imshow
cv2_imshow(img)

【讨论】:

你能解释一下 - OP 在使用这个 sn-p 后可以期待什么? @ArunVinoth 我已经回答了我自己的问题。 这不适用于 colab 中的视频,仅适用于图像【参考方案4】:
from IPython.display import HTML
from base64 import b64encode

video_path = '/content/drive/MyDrive/Data_proc/ball.mp4'

mp4 = open(video_path, "rb").read()
data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
HTML(f"""
<video width=400 controls><source src="data_url" type="video/mp4">
</video>""")

【讨论】:

这个答案没有解释它为什么起作用,如何从中学习? 是colab中播放视频的代码。您必须在播放之前在 colab 中渲染视频播放器。【参考方案5】:

这是 google colab 上的命令: ret, frame = input_video.read() 希望能帮到你

【讨论】:

以上是关于opencv视频播放不了的问题是如何解决的?播放时一闪而过。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Opencv 和 python 从网络上播放视频

opencv如何实现视频连续播放

为啥苹果手机的视频播放不了?

如何使用 OpenCV 从我的磁盘播放视频文件。? [关闭]

opencv重复循环播放视频

course视频播放不了问题解决