Insight Software Guide有一个示例第1册:第4.1.7节:“从缓冲区导入图像数据”,同样的示例也可在WikiExamples中找到
它显示了如何使用ImportImageFilter
对象围绕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
?我是否必须手动使用图像迭代器并在缓冲区上“循环”?或者我可以直接使用filter->GetOutput()
吗?
非常感谢一个小代码示例或指向示例的链接。 (只需将“将图像数据导出到缓冲区”等同于给定的导入示例。)
答案 0 :(得分:2)
ImageType::Pointer output = filter->GetOutput();
ImageType::PixelContainer * outputContainer = output->GetPixelContainer();
ImageType::PixelContainer::Element * resultBuffer = outputContainer->GetBufferPointer();
请参阅Image文档和ImportImageContainer文档。
答案 1 :(得分:0)
以下是我的补救措施:
memcpy( buffer, filter->GetOutput()->GetBufferPointer(),
size[0]*size[1]*sizeof(InputPixelType));
这是有效的,因为在销毁过滤器时,缓冲区已经被解析为" buffer",这是指向数据的指针。