gpt4 book ai didi

c++ - ITK setPixel 遇到堆损坏

转载 作者:行者123 更新时间:2023-11-28 06:19:07 26 4
gpt4 key购买 nike

我有一些关于 ITK 的问题。我首先创建一个图像。然后我使用“for”来设置每个像素的值。之后,当程序步进到“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;
}

最佳答案

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

您应该替换以下行

image->SetLargestPossibleRegion(region);

image->SetRegions(region);

SetRegions() 方法将同时调用 SetLargestPossibleRegion()SetRequestedRegion()SetBufferedRegion() 方法与你给它的区域。

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


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

关于c++ - ITK setPixel 遇到堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29610249/

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