使用openCV在MAC上读/写avi视频

使用openCV在MAC上读/写avi视频,c,macos,video,opencv,grayscale,C,Macos,Video,Opencv,Grayscale,我正在尝试在MAC 10.6.8上使用openCV 2.4.0读取avi视频,并按原样重新编写 我的视频是灰度的,帧速率=25,编解码器=827737670,这是FFV1(我猜) 问题是。。。。 当我按原样读写视频时。。。。我看到许多大小和颜色的变化。。。 经过3或4次的写作,我可以看到视频开始(粉红色)的颜色 我不知道是什么问题 这是我为感兴趣的人编写的代码 提前感谢您的帮助:D 西林 注意:我的计算机上有FFMPEG V 0.11(我不知道这是否重要) 选中此项,然后搜索未压缩的,如HFYU

我正在尝试在MAC 10.6.8上使用openCV 2.4.0读取avi视频,并按原样重新编写

我的视频是灰度的,帧速率=25,编解码器=827737670,这是FFV1(我猜)

问题是。。。。 当我按原样读写视频时。。。。我看到许多大小和颜色的变化。。。 经过3或4次的写作,我可以看到视频开始(粉红色)的颜色

我不知道是什么问题

这是我为感兴趣的人编写的代码

提前感谢您的帮助:D

西林

注意:我的计算机上有FFMPEG V 0.11(我不知道这是否重要)

选中此项,然后搜索未压缩的,如
HFYU

您还可能会发现这篇文章很有趣:

编辑:

我有一个MacOSX10.7.5供我使用,既然你给了我们测试的视频,我决定分享我的发现

出于测试目的,我编写了以下源代码:它加载您的视频文件并将其写入新文件out.avi,同时保留编解码器信息:

#include <cv.h>
#include <highgui.h>

#include <iostream>

int main(int argc, char* argv[])
{
    // Load input video
    cv::VideoCapture input_cap(argv[1]);
    if (!input_cap.isOpened())
    {
        std::cout << "!!! Input video could not be opened" << std::endl;
        return -1;
    }

    // Setup output video
    cv::VideoWriter output_cap("out.avi", 
                               input_cap.get(CV_CAP_PROP_FOURCC),
                               input_cap.get(CV_CAP_PROP_FPS),
                               cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH), input_cap.get(CV_CAP_PROP_FRAME_HEIGHT)));                          
    if (!output_cap.isOpened())
    {
        std::cout << "!!! Output video could not be opened" << std::endl;
        return -1;
    }

    // Loop to read from input and write to output
    cv::Mat frame;
    while (true)
    {       
        if (!input_cap.read(frame))             
            break;

        output_cap.write(frame);
    }

    input_cap.release();
    output_cap.release();

    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
//加载输入视频
cv::视频捕获输入_cap(argv[1]);
如果(!input_cap.ISOPEND())
{
std::cout检查此项,并搜索未压缩的项,如
HFYU

您还可能会发现这篇文章很有趣:

编辑:

我有一个MacOSX10.7.5供我使用,既然你给了我们测试的视频,我决定分享我的发现

出于测试目的,我编写了以下源代码:它加载您的视频文件并将其写入新文件out.avi,同时保留编解码器信息:

#include <cv.h>
#include <highgui.h>

#include <iostream>

int main(int argc, char* argv[])
{
    // Load input video
    cv::VideoCapture input_cap(argv[1]);
    if (!input_cap.isOpened())
    {
        std::cout << "!!! Input video could not be opened" << std::endl;
        return -1;
    }

    // Setup output video
    cv::VideoWriter output_cap("out.avi", 
                               input_cap.get(CV_CAP_PROP_FOURCC),
                               input_cap.get(CV_CAP_PROP_FPS),
                               cv::Size(input_cap.get(CV_CAP_PROP_FRAME_WIDTH), input_cap.get(CV_CAP_PROP_FRAME_HEIGHT)));                          
    if (!output_cap.isOpened())
    {
        std::cout << "!!! Output video could not be opened" << std::endl;
        return -1;
    }

    // Loop to read from input and write to output
    cv::Mat frame;
    while (true)
    {       
        if (!input_cap.read(frame))             
            break;

        output_cap.write(frame);
    }

    input_cap.release();
    output_cap.release();

    return 0;
}
#包括
#包括
#包括
int main(int argc,char*argv[])
{
//加载输入视频
cv::视频捕获输入_cap(argv[1]);
如果(!input_cap.ISOPEND())
{

我能解决这个问题吗,,,,, 以YUV240像素格式编写的原始视频(灰色)

默认情况下,openCV在BGR上读取视频,因此每次我读取视频时,openCV都会将像素值转换为BGR

读写几次后,错误开始变大(因为转换操作) 这就是为什么像素值会改变…我看到的视频是粉红色的

解决方案是,通过FFMPEG项目读写此类视频,该项目提供YUV240和许多其他格式 在FFMPEG教程中有一个代码可以执行此操作


我希望这能帮助其他面临类似问题的人

我找到了问题,,,,, 以YUV240像素格式编写的原始视频(灰色)

默认情况下,openCV在BGR上读取视频,因此每次我读取视频时,openCV都会将像素值转换为BGR

读写几次后,错误开始变大(因为转换操作) 这就是为什么像素值会改变…我看到的视频是粉红色的

解决方案是,通过FFMPEG项目读写此类视频,该项目提供YUV240和许多其他格式 在FFMPEG教程中有一个代码可以执行此操作


我希望这能帮助其他面临类似问题的人

我建议你升级到最新的OpenCV,看看它是否能解决问题。我不担心更新版本!,,因为我用这个版本写我的项目工作…如果在新版本中不工作,我会死的,,,,,我的也不是那么旧,它是2.4.0..有p吗这行有问题吗?CvVideoWriter*writer=cvCreateVideoWriter(“x7.avi”,编解码器,fps,cvGetSize(帧),1);FFV1编解码器有任何问题吗?视频最初是使用ffmpeg库在windows上编写的。我不知道这是否会影响!我最近在Mac OS X 10.7.5上编译了OpencV 2.4.3。别担心。您的问题可能与编解码器故障有关,或者与OpencV方面的某些问题有关。我会同时更新这两个视频。我怀疑您可能正在使用ffmpeg und请记住:您随时可以下载OpenCV 2.4.0并重新安装。只需确保在更新它们之前写下您当前拥有的ffmpeg、libavcodec和libavformat的版本。好的。您知道如何更新它吗?…我需要删除最后一个版本然后重新安装吗?我记得在下载ffmpeg时然后openCV我几乎疯狂了:顺便说一句,我不关心视频中的音频部分…这会影响吗?我建议你升级到最新的openCV,看看它是否能解决问题。我不担心更新版本!,,,因为我用这个版本写我的项目工作…如果它在新版本中不工作,我会死的,,,,,als我的不是那么老,它是2.4.0..这行有什么问题吗?CvVideoWriter*writer=cvCreateVideoWriter(“x7.avi”,编解码器,fps,cvGetSize(帧),1);FFV1编解码器有任何问题吗?视频最初是使用ffmpeg库在windows上编写的。我不知道这是否会影响!我最近在Mac OS X 10.7.5上编译了OpencV 2.4.3。别担心。您的问题可能与编解码器故障有关,或者与OpencV方面的某些问题有关。我会同时更新这两个视频。我怀疑您可能正在使用ffmpeg und请记住:您随时可以下载OpenCV 2.4.0并重新安装。只需确保在更新它们之前写下您当前拥有的ffmpeg、libavcodec和libavformat的版本。好的。您知道如何更新它吗?…我需要删除最后一个版本然后重新安装吗?我记得在下载ffmpeg时然后openCV我几乎疯狂了:顺便说一句,我不关心视频中的音频部分…这会影响吗?在任何编解码器中,如果我在cvCreateVideoWriter的最后一个参数中通过了0…我只得到8KB,没有任何效果!HFYU给视频添加了噪声!…而链接中的另一个编解码器根本不工作(即使没有最后一个参数,它也会给我8KB)OpenCV使用Ffmpeg或Gst