c++ - 使用 SURF 算法运行 .cpp 代码时系统挂起
问题描述
我正在使用 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 文件。之后,我按照以下步骤操作:
- 罗斯科
- 将目录更改为 catkin_ws 并获取它。
- catkin_make
- rosrun package_name node_name
当代码开始运行时,系统挂起。所以,我只是尝试构建和运行每个步骤。我开始知道该系统工作正常,直到vector<KeyPoint>kp;
。但是如果我包含该步骤,系统就会挂起detector->detect(temp_image,kp);
。如果我尝试运行整个代码(以上代码),5-6 分钟后,它将显示检测到的关键点的数量以及带有图像(sign.jpg)的窗口“template_image”和“temp_kp”,但不显示在“temp_kp”中检测到关键点。最后我必须使用电源按钮强制重启系统。
我该如何解决这个问题,可能是什么原因?
提前致谢。
解决方案
推荐阅读
- python - Python:numpy.loadtxt 数据类型
- decimal - 声明 Int 和用小数计算的问题
- python - Python - 替换子进程源文件
- visual-c++ - 使用 Microsoft Visual C++ MFC 2021 进行编程
- c++ - reverse() 函数是如何工作的?
- python - `numpy.moveaxis` 的更好替代方案,用于在错误定向的数组中进行广播
- java - 如何将使用旧版本模式反序列化的 Avro 消息转换为更新的编译模式?
- algorithm - 在具有非递减数字的数字序列中找到 N 的索引(不重构序列)
- php - 如何从php中的函数获取静态变量的值?
- json - 从 JSON 对象 SQL Server 2019 中删除数组元素