想用SURF特征点来检测视频两帧间的差别,进而判断出场景转变的位置,可是每次到转场帧的时候就崩溃
附上代码 谢谢各位了!
//---------------------------------【头文件、命名空间包含部分】----------------------------
// 描述:包含程序所使用的头文件和命名空间
//------------------------------------------------------------------------------------------------
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
int framecount=1 ;
//【1】载入源图片
Mat img_1 ,img_2 ;
VideoCapture capture ("F:\VS项目库\网上下载的镜头分割程序\TEST\TEST\333.avi") ;
capture>>img_1 ;
//【2】利用SURF检测器检测的关键点
int minHessian = 700;
SurfFeatureDetector detector( minHessian );
SurfFeatureDetector(SURF);
vector<KeyPoint> keypoints_1, keypoints_2;
detector.detect( img_1, keypoints_1 );
//【3】计算描述符(特征向量)
SurfDescriptorExtractor extractor ;
Mat descriptors_1, descriptors_2;
extractor.compute( img_1, keypoints_1, descriptors_1 );
while(1)
{
capture>>img_2 ;
imshow("原图",img_2) ;
waitKey(30) ;
detector.detect( img_2, keypoints_2 );
extractor.compute( img_2, keypoints_2, descriptors_2 );
//实例化一个匹配器
BruteForceMatcher< L2<float> >matcher ;
vector<DMatch>matches ;
matcher.match(descriptors_1 ,descriptors_2 ,matches) ;
int num = matches.size();
if(num<10)
cout <<framecount <<endl ;
if(num>0)
descriptors_1=descriptors_2 ;
//img_1 = img_2 ;
framecount++ ;
}
waitKey(0);
return 0;
}
币不多 新手望见谅 谢谢!!