gpt4 book ai didi

c++ - 正弦模式生成的 OpenCV C++ 错误 - structured_light 库

转载 作者:太空狗 更新时间:2023-10-29 22:56:24 25 4
gpt4 key购买 nike

我正在尝试将 C++ 中的正弦曲线模式工具与 Visual Studio 结合使用。我在下面放置了我正在测试的代码。在 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);
}

最佳答案

documentation告诉你 params 也应该是一个 Ptr 但你传递了对象......

尝试使用 makePtr

改变这一行:

structured_light::SinusoidalPattern::Params params;

用这个:

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

每次使用参数时,您都必须将 . 更改为 ->,例如 params.width = 1080; 将是 params->width = 1080;,因为它现在是一个指针。

其余代码应该没问题。

关于c++ - 正弦模式生成的 OpenCV C++ 错误 - structured_light 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com