Пытаюсь перенести свое приложение на raspberry pi 4, но с трекерами не повезло. Я в основном использую трекер как член класса. Хотя это работает на моей машине с Ubuntu, это вызывает ошибку сегментации в raspberry. Я воспроизвел проблему с помощью этого минимального рабочего примера (это не имеет никакого смысла, но точно отражает мою проблему). Я использую OpenCV 4.3.0 с поддержкой INFERENCE ENGINE для обоих (в малине я построил его с использованием docker, как указано в документации). Ошибка сегментации возникает, когда я пытаюсь получить доступ к свойствам трекера (getDefaultName). Я не могу понять, почему это работает на моем компьютере и не работает на Raspberry (я также добавляю, что пример трекера в документации OpenCV работает)
main. cpp
#include <iostream>
#include "person.h"
using namespace std;
int main()
{
cout << "Hello";
person p;
p.createTracker("mosse");
if (p.tracker){
cout << "not null" << endl;
}
else {
cout << "null" << endl;
}
cout << p.tracker->getDefaultName();
return 0;
}
person.h
#ifndef PERSON_H
#define PERSON_H
#include <opencv2/core/core.hpp>
#include <opencv2/tracking/tracker.hpp>
class person
{
public:
person();
cv::Ptr<cv::Tracker> tracker;
void createTracker(std::string type);
};
#endif // PERSON_H
person. cpp
#include "person.h"
person::person()
{
}
void person::createTracker(std::string type)
{
if(type== "mosse") {
tracker = cv::TrackerMOSSE::create();
} else if(type == "csrt")
tracker = cv::TrackerCSRT::create();
else if(type == "kcf")
tracker = cv::TrackerKCF::create();
else if(type == "tld")
tracker = cv::TrackerTLD::create();
else {
std::cout << "Tracking type not specified! This should not happen.";
}
EDIT "not null "печатается
РЕДАКТИРОВАТЬ 2
Помещение всего в главную функцию работает должным образом. Почему?
#include <iostream>
#include <opencv2/tracking/tracking.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
int main()
{
cout << "Hello" << endl;
cv::Ptr<cv::Tracker> tracker = cv::TrackerMOSSE::create();
cout << tracker->getDefaultName() << endl;
return 0;
}