我对ITK有一些疑问。 我首先创建一个图像。然后我使用"用于"设置每个像素的值。之后,问题显示程序步骤为" image-> SetSpacing"。 VS2010指出这可能是由于堆的损坏。当我不使用" for"流通没有问题。
任何人都可以帮助我吗?我在VS2010和ITK 4.4.2中运行程序
#include "iostream"
#include "itkImage.h"
using namespace std;
int main()
{
typedef itk::Image<unsigned char,2> ImageType;
ImageType::IndexType start;
ImageType::SizeType size;
start[0] = 0;
start[1] = 0;
size[0] = 100;
size[1] = 150;
ImageType::RegionType region;
region.SetIndex(start);
region.SetSize(size);
ImageType::Pointer image = ImageType::New();
image->SetLargestPossibleRegion(region);
image->Allocate();
image->FillBuffer( 0 );
for(int j=0; j<150; j++)
{
for (int i=0;i<100;i++)
{
ImageType::PixelType pixelVal;
pixelVal = i+j;
ImageType::IndexType index = {{i,j}};
image->SetPixel(index,pixelVal);
}
}
ImageType::SpacingType spacing;
spacing[0] = 0.1;
spacing[1] = 0.4;
image->SetSpacing(spacing);
ImageType::SpacingType sp =image->GetSpacing();
cout<<sp[0]<<' '<<sp[1]<<endl;
}
答案 0 :(得分:1)
问题是您没有使用image->SetBufferedRegion(region)
方法设置位于内存中的图像区域。
您应该替换以下行
image->SetLargestPossibleRegion(region);
与
image->SetRegions(region);
SetRegions()
方法会同时使用您提供给它的区域调用SetLargestPossibleRegion()
,SetRequestedRegion()
和SetBufferedRegion()
方法。
手动创建图片时,您应始终使用SetRegions()
。
老实说,我不明白这个错误的全部范围。从运行时给出的错误出错是完全不明显的......只是在image
对象被破坏时会发生某种错误。它与SetSpacing()
方法或您分配给index
对象的方式无关。