ITK setPixel符合堆损坏

时间:2015-04-13 16:21:17

标签: c++ visual-studio-2010 itk

我对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;
}

1 个答案:

答案 0 :(得分:1)

问题是您没有使用image->SetBufferedRegion(region)方法设置位于内存中的图像区域。

您应该替换以下行

image->SetLargestPossibleRegion(region);

image->SetRegions(region);

SetRegions()方法会同时使用您提供给它的区域调用SetLargestPossibleRegion()SetRequestedRegion()SetBufferedRegion()方法。

手动创建图片时,您应始终使用SetRegions()


老实说,我不明白这个错误的全部范围。从运行时给出的错误出错是完全不明显的......只是在image对象被破坏时会发生某种错误。它与SetSpacing()方法或您分配给index对象的方式无关。