首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成正弦模式时出现OpenCV C++错误- structured_light库

生成正弦模式时出现OpenCV C++错误- structured_light库
EN

Stack Overflow用户
提问于 2018-01-18 20:25:27
回答 1查看 295关注 0票数 3

我正在尝试在Visual Studio中使用C++中的正弦模式工具。我已经将我正在测试的代码放在下面。在visual studio中,除了下面一行中params下的红色曲线外,一切看起来都很好:

代码语言:javascript
复制
Ptr<structured_light::SinusoidalPattern> sinus = structured_light::SinusoidalPattern::create(params);

当我尝试构建时,我得到了以下错误消息:

代码语言:javascript
复制
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

如果有人能就如何解决这个问题或提出其他方法提供一些建议,我将不胜感激。

代码:

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 20:46:32

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

尝试使用makePtr

更改此行:

代码语言:javascript
复制
structured_light::SinusoidalPattern::Params params;

有了这个:

代码语言:javascript
复制
Ptr<cv::structured_light::SinusoidalPattern::Params> params = makePtr< SinusoidalPattern::Params >();

对于参数的每次使用,您都必须将.更改为->,就像params.width = 1080;将为params->width = 1080;一样,因为它现在将是一个指针。

剩下的代码应该没问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48321322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档