我正在使用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文件。之后我按照以下步骤操作:
当代码开始运行时,系统挂起。所以,我只是尝试构建并运行每个步骤。我开始知道系统工作正常,直到vector<KeyPoint>kp;
。但是如果我包含步骤detector->detect(temp_image,kp);
,系统会挂起。如果我尝试运行整个代码(上面的代码),5-6分钟后,它将显示检测到的关键点的数量和窗口&gt; template_image&#39;和&#39; temp_kp&#39;使用图像(sign.jpg),但不在&lt; temp_kp&#39;中显示检测到的关键点。最后我必须使用电源按钮强制重启系统。
我该如何解决这个问题?可能是什么原因?
提前致谢。