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