Я работаю над обработкой изображений с использованием openCV и c ++.Я написал код с использованием алгоритма SURF для определения ключевых точек на изображении и показа обнаруженных ключевых точек.Я могу собрать и запустить код без каких-либо ошибок.Но система зависает после запуска кода.
Я использую Ubuntu 16.04, ROS Kinetic и OpenCV 3.3.1, который был автоматически установлен вместе с ROS.
Я включил все необходимые заголовочные файлы для использованияАлгоритм 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.После этого я выполнил следующие действия:
- roscore
- измените каталог на catkin_ws и отправьте его.
- catkin_make
- rosrun имя_пакета имя_узла
Когда код запускается, система зависает.Итак, я просто пытаюсь построить и запустить каждый шаг.Я узнал, что система работает нормально до vector<KeyPoint>kp;
.Но система зависает, если я включаю шаг detector->detect(temp_image,kp);
.Если я попытаюсь запустить весь код (приведенный выше код), через 5-6 минут он отобразит количество обнаруженных ключевых точек, а также окна 'template_image' и 'temp_kp' с изображением (sign.jpg), но не отображаетобнаруженные ключевые точки в 'temp_kp'.И, наконец, я вынужден перезапустить систему с помощью кнопки питания.
Как это исправить и в чем может быть причина?
Заранее спасибо.