Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将ITK(insight Toolkit)结果写入本地缓冲区 应用ITK筛选器管道后,如何将结果写回要使用的缓冲区(ITK外部)?_C++_Itk - Fatal编程技术网

C++ 将ITK(insight Toolkit)结果写入本地缓冲区 应用ITK筛选器管道后,如何将结果写回要使用的缓冲区(ITK外部)?

C++ 将ITK(insight Toolkit)结果写入本地缓冲区 应用ITK筛选器管道后,如何将结果写回要使用的缓冲区(ITK外部)?,c++,itk,C++,Itk,有一本示例书1:第4.1.7章:“从缓冲区导入图像数据”,同样的示例也可以在中找到 它展示了如何使用C++代码包来封装ITK指针,以便进一步使用 但是,本例随后使用Writer对象将过滤结果写入文件 如何将过滤后的结果写入另一个C++数组中?或者如何覆盖用作输入的数组 本质上,我有一个应用程序,它在缓冲区(localBuffer)中包含一个图像,我可以按照下面的示例代码进行包装: [...] const bool filterOwnsBuffer= false; importFil

有一本示例书1:第4.1.7章:“从缓冲区导入图像数据”,同样的示例也可以在中找到

它展示了如何使用C++代码包来封装ITK指针,以便进一步使用<代码> 但是,本例随后使用

Writer
对象将过滤结果写入文件

如何将过滤后的结果写入另一个C++数组中?或者如何覆盖用作输入的数组

本质上,我有一个应用程序,它在缓冲区(
localBuffer
)中包含一个图像,我可以按照下面的示例代码进行包装:

 [...]
 const bool filterOwnsBuffer= false;    
 importFilter->SetImportPointer( localBuffer, size[0]*size[1], filterOwnsBuffer );
然后,我可以在任何itk管道中使用它,并在特定阶段“更新”它:

[...]
FilterType::Pointer filter = FilterType::New();
filter->SetInput( importFilter->GetOutput() );
filter->Update();
我现在如何确保
localbuffer
具有过滤后的值?或者,如何为输出值设置不同的
resultbuffer
?我必须手动在缓冲区上使用图像迭代器和“循环”吗?或者我可以更直接地使用
过滤器->GetOutput()

一个小的代码示例或相应示例的链接将非常感谢。 (简单地说,“将图像数据导出到缓冲区”相当于给定的导入示例。)


请参阅文档和文档。

以下是我的补救措施:

memcpy( buffer, filter->GetOutput()->GetBufferPointer(),
         size[0]*size[1]*sizeof(InputPixelType));

这是因为当过滤器被销毁时,缓冲区已经被解析为“buffer”,即指向数据的指针

谢谢。我试试看。假设我已经有一个指向resultBuffer的指针(来自我的应用程序),我可以使用outputContainer->GetBufferPointer()直接赋值吗?(当然要匹配类型和写入顺序。)[不过,我会仔细阅读文档。]据我所知,*resultBuffer现在是一个指向结果的指针,但缓冲区仍然是一个不同于我事先准备的内存位置。如果我已经分配了一个结果内存(来自我的应用程序),我如何告诉itk使用这个内存作为缓冲区?(当然,内存大小需要正确。)即,我有一个(float*)dst目标指针,指向适当大小的连续内存。如果您使用的过滤器是InPlaceImageFilter,则可以重新使用输入内存。否则,可以使用SetOutput方法。在过滤器上调用UpdateOutputInformation()将使用正确的参数填充图像上的输出信息。我认为应该将其编辑为“ImageType::PixelContainer*outputContainer=output->GetPixelContainer();”
memcpy( buffer, filter->GetOutput()->GetBufferPointer(),
         size[0]*size[1]*sizeof(InputPixelType));