使用SURF算法

时间:2018-05-24 07:10:51

标签: c++ opencv ubuntu-16.04 ros surf

我正在使用openCV和c ++进行图像处理。我使用SURF算法编写了一个代码,用于检测图像中的关键点并显示检测到的关键点。我能够构建和运行代码,没有任何错误。但运行代码后系统挂起。

我使用的是自动安装ROS的Ubuntu 16.04,ROS Kinetic和OpenCV 3.3.1。

我包含了使用SURF算法所需的所有头文件,还使用了必需的命名空间'。我的代码的主要文件如下:

using namespace cv;
using namespace std
using namespace cv::xfeatures2d;
int main(int argc,char **argv)
{
ros::init(argc,argv,"image_detection");
while(1)
{
Mat temp_image=imread("/home/pelican/Pictures/sign.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat temp_kp;

//initialize SURF
Ptr<SURF>detector=SURF::create(500,4,4,false,false);

//compute keypoints
vector<KeyPoint>kp;
detector->detect(temp_image,kp);

//display keypoints
drawKeypoints(temp_image,kp,temp_kp,Scalar(255,0,150),DrawMatchesFlags::DEFAULT);
cout<<"detected kp="<<kp.size()<<endl;

namedWindow("template_image",CV_WINDOW_NORMAL);
imshow("template_image",temp_image);
namedWindow("temp_kp",CV_WINDOW_NORMAL);
imshow("temp_kp",temp_kp);

ros::spinOnce();
if(waitKey(30)==27) //wait for esc key press for 30ms. If pressed,break loop
{
cout<<"esc key pressed"<<endl;
break;
}
}
return 0;
}

我也编辑了CMakeLists.txt和Package.xml文件。之后我按照以下步骤操作:

  1. roscore
  2. 将目录更改为catkin_ws并将其获取。
  3. catkin_make
  4. rosrun package_name node_name
  5. 当代码开始运行时,系统挂起。所以,我只是尝试构建并运行每个步骤。我开始知道系统工作正常,直到vector<KeyPoint>kp;。但是如果我包含步骤detector->detect(temp_image,kp);,系统会挂起。如果我尝试运行整个代码(上面的代码),5-6分钟后,它将显示检测到的关键点的数量和窗口&gt; template_image&#39;和&#39; temp_kp&#39;使用图像(sign.jpg),但不在&lt; temp_kp&#39;中显示检测到的关键点。最后我必须使用电源按钮强制重启系统。

    我该如何解决这个问题?可能是什么原因?

    提前致谢。

0 个答案:

没有答案