- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要有关基本(我想)C++ 问题的帮助。我想使用 C++ 函数来简化 ITK 管道,但我不知道如何传递参数和获取输出。我已经在 ITK 示例中看到如何从 main() 调用一个函数来创建图像
(如本例:http://www.itk.org/Wiki/ITK/Examples/ImageProcessing/LabelGeometryImageFilter)
我想做的是这样的(伪代码):
int main ()
{
Image = reader -> GetOutput();
function1 (input, ouput) // where input is Image
function2 (input, ouput) // where input now is the output of function1
and so on
}
void function1
{
}
void function2
{
}
干杯
埃琳娜
最佳答案
我的印象是你来自一个带有 ITK 管道的长“only-main”函数,现在你想通过将代码拆分成一些函数来使代码更具可读性,并且你对C++。如果不是那样,我的回答可能会重复您已经知道的内容..
首先,ITK 有这个很好的管道结构,所以你可以准备一个管道一个接一个地连接一个过滤器,然后在最后一个过滤器上调用更新并让整个管道处理图像。如果您更改第一个过滤器的输入,并再次调用最后一个过滤器的更新,则处理将再次开始,因为过滤器检测到它们的输入与上次相比发生了变化。初学者的一个典型错误(至少对我来说是这样)是在分配输入后立即尝试获取过滤器的输出,而不确保从该过滤器或其后的过滤器进行更新。不管怎样,你也可以在每个过滤器之后调用更新,只是为了确保一切顺利(并且为了更容易调试)。我不确定是否存在性能问题,但在我的应用程序中我没有注意到。
因此,当您从这些函数中获取输出时,请牢记这一点!
其次,ITK 智能指针可以简化您的编程,因为您不必记得在使用后删除它们,也不必担心它们在从函数返回时会超出范围。这也意味着有时事情不会按预期更新,因为它们仍然保留旧数据(例如,如果在 for 循环外声明过滤器,则在重置过滤器时必须小心)。但通常它们会简化您的生活。
在每个函数内部制作小管道并不太难:您的输出只是指向函数中最后一个过滤器输出的指针。您可以将此指针设置为函数的返回值(另请参见 http://www.itk.org/Wiki/ITK/Examples/Utilities/ReturnObjectFromFunction )。或者您可以通过引用传递输出图像(如在您的伪代码中,如果您传递指针,您已经通过引用传递)。有关 C++ 的更新,请参阅示例 http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/ .伪代码:
int main ()
{
ImageType::Pointer inputimage, output1, output2;
inputimage = reader -> GetOutput();
output1 = function1 (inputimage) // where input is Image
function2 (output1, output2) // where input now is the output of function1 , pass argument by reference
}
ImageType::Pointer function1 (ImageType::Pointer aInput)
{
somefilter::pointer filter = somefilter::new()
filter ->SetInput( aInput);
filter->Update(); // unless you know what you are doing (you know that youe will access the data only at the end )
return filter->GetOutput()
}
void function2 (ImageType::Pointer aInput, ImageType::Pointer aOutput)
{
somefilter::pointer filter = somefilter::new()
filter ->SetInput( aInput);
filter->Update();
aOutput = filter->GetOutput()
}
您甚至可以决定复制图像(以便它独立于生成它的管道)并将其发送到另一个管道,请参阅 http://www.itk.org/Wiki/ITK/Examples/SimpleOperations/ImageDuplicator
作为旁注,您还可以创建自己的类,将 itk 过滤器作为成员,在初始化时创建管道,然后只需在您的方法中修改过滤器的输入,而无需每次都重新创建管道。
关于c++ - 在 ITK 管道中使用 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24534163/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!