[英]why can't I access imagedata in main?
我正在尝试编写一个使用VTK和C ++读取MRI数据的程序。 但是我无法获得MRI原始数据的间隔。 “ GetSpacing”仅在“ ReadImageData”功能中起作用。 我想我在C ++编程中犯了一些错误。 但我不知道它在哪里。
vtkImageData* ReadImageData(string mri_imagedata_file)
{
vtkSmartPointer<vtkMetaImageReader> reader =
vtkSmartPointer<vtkMetaImageReader>::New();
reader->SetFileName(mri_imagedata_file.c_str());
reader->Update();
vtkImageData* metaimage = reader->GetOutput();
double sp[3];
metaimage->GetSpacing(sp);
cout << sp[0] << " " << sp[1] << " " << sp[2] <<endl; //<----------It works here.
return metaimage;
}
int main (int argc, char *argv[])
{
if(argc != 2)
{
cerr << "Usage: " << argv[0] << " MRI image data" <<endl;
return EXIT_FAILURE;
}
string mri_imagedata_file = argv[1];// Input "prost00.mhd"
vtkImageData* metaimage = ReadImageData(mri_imagedata_file);
double sp2[3];
metaimage->GetSpacing(sp2);
cout << sp2[0] << " " << sp2[1] << " " << sp2[2] << endl; //<-----It doesn't work here
}
感谢您的关注。
我的假设是, vtkMetaImageReader::GetOutput()
返回指针一些vtkMetaImageReader
内部数据,所以当你退出ReadImageData
您的reader
被破坏,返回指针变为无效。
假设vtkSmartPointer<vtkMetaImageReader>
都是一种智能指针,则当ReadImageData
返回时, reader
指向的函数将被破坏。 这包括元metaimage
所指向的内容。
return metaimage;
// reader->~(); // Destructed here. Including what is pointed to by metaimage.
}
一个好的解决方案是返回智能指针而不是metaimage
。 这样,当ReadImageData
返回时,不会破坏reader
指向的内容,并且可以在main中使用。
它看起来像你忘了传递数组作为参数传递给GetSpacing
在main
,所以调用返回过载double*
,让你的阵列不变。
您也正在打印一个名为spacing
的数组,尽管看起来像您想要在sp2
中的sp2
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.