OpenCV C ++ Ошибка с генерацией синусоидального паттерна — библиотека structd_light

Я пытаюсь использовать инструмент синусоидального шаблона в C ++ с Visual Studio. Я поместил код, с которым я тестирую это ниже. В визуальной студии все выглядит отлично, за исключением красного параметра в следующей строке:

Ptr<structured_light::SinusoidalPattern> sinus = structured_light::SinusoidalPattern::create(params);

Когда я пытаюсь собрать, я получаю следующее сообщение об ошибке:

Severity    Code    Description Project File    Line    Suppression State Error (active)
no suitable user-defined conversion from
"cv::structured_light::SinusoidalPattern::Params" to
"cv::Ptr<cv::structured_light::SinusoidalPattern::Params>" exists   Structured_Light_Test
c:\Users\ianco\Desktop\CPlusPlus_Programming\Structured_Light_Test\Structured_Light_Test\Main.cpp   70

Я был бы очень признателен, если бы кто-нибудь мог дать совет о том, как мне обойти эту проблему или предложить другой метод.

КОД:

#include <opencv2/highgui.hpp>
#include <vector>
#include <iostream>
#include <fstream>
#include <opencv2/core.hpp>
#include <opencv2/core/utility.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/calib3d.hpp>
#include <opencv2/structured_light.hpp>
#include <opencv2/phase_unwrapping.hpp>

using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
structured_light::SinusoidalPattern::Params params;
params.width = 1080;
params.height = 700;
params.nbrOfPeriods = 5;
params.setMarkers = true;
params.horizontal = false;
params.methodId = 2;
params.shiftValue = static_cast<float>(2 * CV_PI / 3);
params.nbrOfPixelsBetweenMarkers = 70;
String outputPatternPath = "C:/Users/ianco/Desktop/CPlusPlus_Programming";
String outputWrappedPhasePath = "C:/Users/ianco/Desktop/CPlusPlus_Programming";
String outputUnwrappedPhasePath = "C:/Users/ianco/Desktop/CPlusPlus_Programming";

Ptr<structured_light::SinusoidalPattern> sinus = structured_light::SinusoidalPattern::create(params);
// Storage for patterns
vector<Mat> patterns;
//Generate sinusoidal patterns
sinus->generate(patterns);cv::Mat blue, green, red;
std::vector<cv::Mat> images(3);

// OpenCV works natively with BGR ordering
images.at(0) = patterns[0];
images.at(1) = patterns[1];
images.at(2) = patterns[2];

cv::Mat color;
cv::merge(images, color);

namedWindow("pattern", WINDOW_NORMAL);
setWindowProperty("pattern", WND_PROP_FULLSCREEN, WINDOW_FULLSCREEN);
imshow("pattern", color);
waitKey(3000);
}

3

Решение

документация говорит вам, что params также должен быть Ptr, но вы передали объект …

попробуйте использовать makePtr

Измените эту строку:

structured_light::SinusoidalPattern::Params params;

с этим:

Ptr<cv::structured_light::SinusoidalPattern::Params> params = makePtr< SinusoidalPattern::Params >();

вам придется изменить . в -> для каждого использования параметров, таких как params.width = 1080; было бы params->width = 1080;, так как это будет указатель сейчас.

Остальная часть кода должна быть в порядке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]