- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
最近我在 Stackoverflow 上被推荐升级到 OpenCV 2.3.1 以改进 cvVideoWriter
的结果(视频的最后一帧既没有读/写)也确实有 v. 2.3.1 读还可以,写还是有点问题。尽管如此,我解决了这个问题,但无法解决另一个问题:我的程序在使用 VideoWriter 函数时总是会崩溃。我检查了原因,结果证明是新版本的 highgui (2.3.1),因为如果我使用 highgui210 而不是崩溃(当然是最后一帧问题)。有谁知道这个问题以及如何解决它?顺便说一句,我不知道它是否重要:我已经按照下一页的说明在我的系统上安装 OpenCV 2.3.1(我使用的是 VS 9 Express):
http://www.arunkumarr.co.in/site/index.php/articles/10-configuring-opencv-23-in-visual-studio-2008
干杯斯蒂芬
最佳答案
您的代码不是我要求的最小示例。它不完整,识别错误,无法编译,因此无法判断它有什么问题。
它在最新的 OpenCV 版本中崩溃的事实并不一定意味着 OpenCV 有问题:可能是他们最终在一个在以前的版本中几乎什么都不做的函数中做了一个不错的实现。
最适合您的做法是:编写一个最小的应用程序来执行您感兴趣的核心任务,通过阅读您的代码,它似乎是:
从相机读取帧;
打开视频写入器,将摄像头的帧记录到磁盘中;
就这2个任务,就是这么简单!忘记所有其他的东西,CreateAvi()
、CloseAvi()
、remove()
和其他不属于 OpenCV 的函数。
这个简单的应用程序将证明 OpenCV 可以正常工作,并且您看到的问题可能是由从这个简单的应用程序中删除的代码中存在的其他内容引起的。
这个问题不在 OpenCV 中,它来自您编写的代码。
编辑:
你好德国人,我没有被你的问题攻击,也没有开发 OpenCV。现在,下面的应用程序执行了您从一开始就应该执行的操作。 这是一个使用 OpenCV 读取视频文件、在窗口上显示帧然后将帧写入磁盘上的新文件的最小示例。它很简单,很有效,并且证明了我一直试图告诉您的内容:您观察到的问题不是由 OpenCV 2.3.1 中的错误引起的。享受:
#include <cv.h>
#include <highgui.h>
int main()
{
CvCapture* capture = cvCreateFileCapture("green_lantern_sample.avi");
if (!capture)
{
printf("!!! cvCreateFileCapture failed\n");
return -1;
}
int frame_count = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_COUNT);
int fps = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
int video_w = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);
int video_h = (int) cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);
printf("* %d x %d\n", video_w, video_h);
CvVideoWriter* writer = cvCreateVideoWriter("out.avi",
CV_FOURCC('X','V','I','D'),
fps,
cvSize(video_w, video_h),
1);
if (!writer)
{
printf("!!! cvCreateVideoWriter failed\n");
return -1;
}
cvNamedWindow("video");
IplImage* frame = NULL;
while (true)
{
frame = cvQueryFrame(capture);
if(!frame)
break;
cvWriteFrame(writer,frame);
cvShowImage("video", frame);
cvWaitKey(1);
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&capture);
cvDestroyWindow("video");
return 0;
}
在 VS 9 Express(Windows XP 32 位)和 Fedora Linux(也是 32 位)上使用 OpenCV 2.3.1 进行了测试。
关于c - 使用 cvVideoWriter 时 OpenCV 2.3.1 highgui 在退出时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206837/
此代码片段应该保存视频的一部分,其范围由 start 和 end 定义。有一个结构数组 (data[i]) 保存原始视频中视频镜头的起始帧和结束帧。总共有8个镜头。 for (int i = 0; i
我使用的是从这里获得的预编译版本的 OpenCV:http://aptogo.co.uk/2011/09/opencv-framework-for-ios/ 我正在开发一个 Ogre3D 应用程序,我
最近我在 Stackoverflow 上被推荐升级到 OpenCV 2.3.1 以改进 cvVideoWriter 的结果(视频的最后一帧既没有读/写)也确实有 v. 2.3.1 读还可以,写还是有点
我是一名优秀的程序员,十分优秀!