aihot  2017-04-30 10:54:08  OpenCV |   查看评论   
  •   
  • //-- 从image_1(要检测到的对象)获取角落
  • Point2f obj_corners[4] = { cvPoint(0,0), cvPoint( img_1.cols, 0 ), cvPoint( img_1.cols, img_1.rows ), cvPoint( 0, img_1.rows ) };  
  • Point scene_corners[4];  
  •   
  • //-- 在场景中映射这些角落 ( image_2)  
  • forint i = 0; i < 4; i++ )  
  • {  
  •   double x = obj_corners[i].x;   
  •   double y = obj_corners[i].y;  
  •   
  •   double Z = 1./( H.at<double>(2,0)*x + H.at<double>(2,1)*y + H.at<double>(2,2) );  
  •   double X = ( H.at<double>(0,0)*x + H.at<double>(0,1)*y + H.at<double>(0,2) )*Z;  
  •   double Y = ( H.at<double>(1,0)*x + H.at<double>(1,1)*y + H.at<double>(1,2) )*Z;  
  •   scene_corners[i] = cvPoint( cvRound(X) + img_1.cols, cvRound(Y) );  
  • }    
  •    
  • //-- 在角落之间画线(场景中映射的对象) - image_2 )  
  • line( img_matches, scene_corners[0], scene_corners[1], Scalar(0, 255, 0), 2 );  
  • line( img_matches, scene_corners[1], scene_corners[2], Scalar( 0, 255, 0), 2 );  
  • line( img_matches, scene_corners[2], scene_corners[3], Scalar( 0, 255, 0), 2 );  
  • line( img_matches, scene_corners[3], scene_corners[0], Scalar( 0, 255, 0), 2 );  
  •   
  • //-- 显示检测到的匹配
  • imshow( "Good Matches & Object detection", img_matches );  

  • 然后再看一下Harris特征检测,在计算机视觉中,通常需要找出两帧图像的匹配点,如果能找到两幅图像如何相关,就能提取出两幅图像的信息。我们说的特征的最大特点就是它具有唯一可识别这一特点,图像特征的类型通常指边界、角点(兴趣点)、斑点(兴趣区域)。角点就是图像的一个局部特征,应用广泛。harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性高,尤其对L型角点检测精度高,但由于采用了高斯滤波,运算速度相对较慢,角点信息有丢失和位置偏移的现象,而且角点提取有聚簇现象。具体实现就是使用函数cornerHarris实现。 除了利用Harris进行角点检测,还可以利用Shi-Tomasi方法进行角点检测。使用函数goodFeaturesToTrack对角点进行检测,效果也不错。也可以自己制作角点检测的函数,需要用到cornerMinEigenVal函数和minMaxLoc函数,最后的特征点选取,判断条件要根据自己的情况编辑。如果对特征点,角点的精度要求更高,可以用cornerSubPix函数将角点定位到子像素。

     

    除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV学习笔记(九)——2维特征Feature2D

    留言与评论(共有 0 条评论)
       
    验证码:
    [lianlun]1[/lianlun]