itk C++ 函数参数传递

问题描述 投票:0回答:1

我正在尝试编写一个函数(封装)的简单行为,该函数通过 itk ImageToHistogramFilter 根据输入计算直方图。虽然这工作正常,但我似乎无法从函数中得到结果。我最喜欢的函数参数方法是通过引用传递,如果成功则返回零:

int Histogram(HistogramType&result,ImageType const&image1,...
    auto f=HistogramFilterType::New();
    ...
    return EXIT_SUCCESS;

但是现在我遇到了一个荒谬的问题,我无法分配结果。

    std::cout<<"total frequency: "<<f->GetOutput()->GetTotalFrequency()<<std::endl;//This gives a reasonable value like 2334;
    result=*(f->GetOutput());

这不起作用,因为它已被删除:

/usr/local/include/ITK-5.3/itkHistogram.h:80:3: note: declared here
   80 |   ITK_DISALLOW_COPY_AND_MOVE(Histogram);

我尝试按照文档中选择的方式进行操作:

int Histogram(HistogramType::Pointer result,ImageType::ConstPointer image1,...
    auto f=HistogramFilterType::New();
    ...
    std::cout<<"total frequency: "<<f->GetOutput()->GetTotalFrequency()<<std::endl;//This still gives a reasonable value like 2334;
    result=f->GetOutput();

    std::cout<<"total frequency: "<<rslt->GetOutput()->GetTotalFrequency()<<std::endl;//This too gives a reasonable value like 2334;
    ...
    return EXIT_SUCCESS;

现在确实可以编译,但是当我尝试访问结果(在函数范围之外)时,指向的对象似乎丢失了,尽管它应该是一个智能指针:

auto result=HistogramType::New();
if(Histogram(result,aVariableWithAnImage...
    return EXIT_FAILURE;
else
    std::cout<<result->GetTotalFrequency()<<std::endl;//This gives 0 now

我尝试了 itk 对象函数 Clone() 和 get() 的其他变体来绕过禁止,但当然(或者幸运的是我必须承认)它不起作用。我觉得我正在做一些根本错误的事情。

c++ parameter-passing pass-by-reference itk return-by-reference
1个回答
0
投票

您是否尝试过通过

SmartPointer
返回值?比如:

HistogramType::Pointer calcHistogram(/* params */)
{
   // compute it
   return f->GetOutput();
}
© www.soinside.com 2019 - 2024. All rights reserved.