gpt4 book ai didi

c++ - 仅将 vtkImageData 的结构复制到另一个用零填充的 vtkImageData

转载 作者:行者123 更新时间:2023-11-30 05:04:52 25 4
gpt4 key购买 nike

我现在正在使用带有 vtk 的 C++ 构建一个医学注释系统。

我想在 3d vtkimagedata 的切片(轴向,冠状,矢状)上画线或绘画,并连续保存绘制的 3d vtkimagedata 图像。所以我打算制作一个新的空(用零填充)但具有与原始 vtkimagedata 相同的属性。

有谁知道如何只复制vtkimagedata的结构到另一个?

提前致谢!

最佳答案

您可以使用 ShallowCopy() 复制 vtkDataSet 对象的属性或 DeepCopy()函数,但如果您只对给定的几何结构感兴趣 vtkImageData对象,我认为你可以这样做:

// copy attributes from a to b (assuming access to a by address)
vtkSmartPointer<vtkImageData> b = vtkSmartPointer<vtkImageData>::New();
b->SetOrigin(a->GetOrigin());
b->SetSpacing(a->GetSpacing());
b->SetExtent(a->GetExtent());

然后您可以添加一个新字段(在以下示例中关联到点)。随意修改类型和名称以满足您的需要:

// allocate memory for a new scalar field
vtkIdType numberOfPoints = b->GetNumberOfPoints();
vtkSmartPointer<vtkCharArray> f = vtkSmartPointer<vtkCharArray>::New();
f->SetNumberOfComponents(1);
f->SetNumberOfTuples(numberOfPoints);
f->SetName("NewScalarFieldName");

// fill the array with zeros
char *arr = static_cast<char*>(f->GetVoidPointer(0));
std::fill(arr, arr + numberOfPoints, 0);

// add the field to the data set
b->GetPointData()->AddArray(f);

在这里,我使用了 static_cast 来访问原始数据并在没有太多开销的情况下对其进行修改,但您可以使用 SetTuple()功能也一样。

关于c++ - 仅将 vtkImageData 的结构复制到另一个用零填充的 vtkImageData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48638114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com