我是ITK的新手,我正在尝试编写我刚读过的图像。图像写得很成功但是当我试图打开图像时,它只是一个黑色图像。但是,大小与应有的大小完全相同(它与输入图像大小相同)。我不知道问题是什么,为什么图像是黑色的。 这是我的代码:
typedef unsigned char PixelType;
const unsigned int Dimension = 2;
typedef itk::Image< PixelType, Dimension > ImageType; // ImageType is an image with 2D and unsigned number of pixels
typedef itk::ImageFileReader<ImageType> ReaderType;
typedef itk::ImageFileWriter< ImageType> WriterType;
typedef itk::ImageFileReader<ImageType> FileReaderType;
using namespace std;
ReaderType::Pointer LoadImage(string);
void WriteImage(string,ImageType::Pointer);
int main()
{
string fileName = "test.tiff";
string outFileName = "out.tiff";
ReaderType::Pointer reader = LoadImage(fileName);
ImageType::Pointer image = reader->GetOutput();
WriteImage(outFileName, image);
//cout<<reader<<endl;
//cout<<image<<endl;
return EXIT_SUCCESS;
}
ReaderType::Pointer LoadImage(string filename){
itk::TIFFImageIO::Pointer tiffImageIO = itk::TIFFImageIO::New();
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName("test.tiff");
reader->SetImageIO(tiffImageIO);
try{
reader->Update();
}
catch(itk::ExceptionObject & e){
cerr<<e.GetDescription()<<endl;
}
return reader;
}
void WriteImage(string filename, ImageType::Pointer image){
itk::TIFFImageIO::Pointer tiffImageIO = itk::TIFFImageIO::New();
WriterType::Pointer writer = WriterType::New();
writer->SetFileName(filename);
writer->SetImageIO(tiffImageIO);
writer->SetInput(image);
try{
writer->Update();
cout<<"Image has been written!"<<endl;
}
catch(itk::ExceptionObject & e){
std::cerr << e.GetDescription() << std::endl;
}
}
答案 0 :(得分:2)
您使用什么程序来查看图片?你可以调整窗口,水平或对比度吗?
当你判断你的图像在视觉上是黑色时,你的图像浏览器试图显示的动态范围可能与图像中的不同。
您正在将图像读入&#34;无符号整数&#34;。如果您的图像最初在0-255范围内,并且您使用范围为0-4294967296的像素类型将其写出,如果您正在尝试显示该范围,则会看到黑色图像。