C++ CVR框架峭壁
我试图编写一个简单的openCV代码,创建一个捕获并从中检索第一帧C++ CVR框架峭壁,c++,opencv,C++,Opencv,我试图编写一个简单的openCV代码,创建一个捕获并从中检索第一帧 **CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str()); if (m_pCapfile) m_frames = cvRound(cvGetCaptureProperty(m_pCapfile, CV_CAP_PROP_FRAME_COUNT)); cvSetCaptureProperty(m_pCapfile, CV_CAP_PROP_P
**CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str());
if (m_pCapfile)
m_frames = cvRound(cvGetCaptureProperty(m_pCapfile, CV_CAP_PROP_FRAME_COUNT));
cvSetCaptureProperty(m_pCapfile, CV_CAP_PROP_POS_FRAMES, 0);
int ret = cvGrabFrame( m_pCapfile);
IplImage *cap = cvRetrieveFrame( m_pCapfile);**
在m_中,帧数是153,据我所知,这是正确的帧数。
cvGrabFrame返回1到ret,但是cvRetrieveFrame崩溃
我尝试使用cvCaptureFromFile和cvCaptureFromAVI而不是cvCreateFileCapture
在这两种情况下,cvRetrieveFrame方法都会崩溃
有什么想法吗
谢谢
**CvCapture*m_pCapfile=cvCreateFileCapture(m_aviFileName.c_str())代码>
这不应该吗
像下面这样
CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str());
我认为您需要将代码更改为我建议的代码。另外,如果这是完整的代码,请确保在检索帧的循环期间,没有调用cvReleaseCapture()。只有在捕捉到所有帧或所需的指定帧数时,才会在结束时调用此方法。**CvCapture*m_pCapfile=cvCreateFileCapture(m_aviFileName.c_str())代码>
这不应该吗
像下面这样
CvCapture *m_pCapfile = cvCreateFileCapture(m_aviFileName.c_str());
我认为您需要将代码更改为我建议的代码。另外,如果这是完整的代码,请确保在检索帧的循环期间,没有调用cvReleaseCapture()。只有在捕捉到所有帧或所需的指定帧数后,才会在结束时调用此方法。您使用的是哪个版本的OpenCV?大家都知道Opencv有这样的问题。我已经下载了2.4.0,我也有同样的问题。你使用的是哪个版本的Opencv?Opencv也有这样的问题。我已经下载了2.4.0,我也有同样的问题。最后有一个版本,我只是没有复制它。代码实际上与您的代码相同,添加星号是因为我试图格式化文本并使代码看起来粗体。你可以看到在代码的末尾有两个额外的星号哦,这对我来说是一个新的星号,双引号!尽管如此,最后几步可能对您有用的是安装cam的驱动程序,看看您的相机是否受opencv支持,不要混合任何x64、x86版本,即使这不起作用,尝试重建OpenCV的二进制文件。我正在使用预先录制的AVI文件崩溃在:虚拟IplImage*retrieveFrame(int){unsigned char*data=0;int step=0,width=0,height=0,cn=0;if(!ffmpegCapture | | |!icvRetrieveFrame_FFMPEG|p)(ffmpegCapture,&data,&step,&width,&height,&cn)返回0;cvInitImageHeader(&frame,cvSize(width,height),8,cn);cvSetData(&frame,data,step);返回&frame;}最后有一个版本,我只是没有复制它。代码实际上和你的一样,添加了星号,因为我试图格式化文本并使代码看起来粗体。你可以看到,在代码的最后有两个额外的星号哦,这对我来说是一个新的,双引号!尽管如此,最后的几个步骤可能对您有用的是安装cam的驱动程序,查看您的相机是否受opencv支持,不要混合任何x64、x86版本,即使这不起作用,也尝试重建opencv的二进制文件。我使用的是预录的AVI文件崩溃在:virtual IplImage*retrieveFrame(int)中的icvRetrieveFrame\u FFMPEG\p中{unsigned char*data=0;int step=0,width=0,height=0,cn=0;if(!ffmpegCapture | | |!icvRetrieveFrame(ffmpegCapture,&data,&step,&width,&height,&cn)返回0;cvInitImageHeader(&frame,cvSize(width,height),8,cn);cvSetData(&frame,data,step);返回&frame;}