I have coded a method to create an Itk image from a buffer (in my case it's a Cimg image type). This is the algorithme : void Cimg_To_ITK (CImg<uchar> img){ const unsigned int Dimension = 2; typedef itk::RGBPixel< unsigned char > RGBPixelType; typedef itk::Image< RGBPixelType, Dimension > RGBImageType; typedef itk::ImportImageFilter< RGBPixelType, Dimension > ImportFilterType; ImportFilterType::Pointer importFilter = ImportFilterType::New(); typedef itk::ImageFileWriter< RGBImageType > WriterType; WriterType::Pointer writer = WriterType::New(); RGBImageType::SizeType imsize; imsize[0] = img.width(); imsize[1] = img.height(); ImportFilterType::IndexType start; start.Fill( 0 ); ImportFilterType::RegionType region; region.SetIndex( start ); region.SetSize( imsize ); importFilter->SetRegion( region ); const itk::SpacePrecisionType origin[ Dimension ] = { 0.0, 0.0 }; importFilter->SetOrigin( origin ); const itk::SpacePrecisionType spacing[ Dimension ] = { 1.0, 1.0 }; importFilter->SetSpacing( spacing ); const unsigned int numberOfPixels = imsize[0] * imsize[1]; const bool importImageFilterWillOwnTheBuffer = true; RGBPixelType * localBuffer = new RGBPixelType[ numberOfPixels ]; memcpy(localBuffer->GetDataPointer(), img.data(), numberOfPixels); importFilter->SetImportPointer( localBuffer, numberOfPixels,importImageFilterWillOwnTheBuffer ); writer->SetInput( importFilter->GetOutput() ); writer->SetFileName( "output.png" ); writer->Update();}I dont have what i want as a output :input :output : 解决方案 Might be also good idea to check how the Cimg stores the pixels for image and if it differs from the RGBPixelType. I suspect that the RGBPixelType array has pixels stored in rgbrgbrgbrgb while the other may have them in some rrrrggggbbbb style format. Or, as already hinted, if the input is a gray-scale image with single channel you have to replicate the value for each rgb value (or if both are rgb you have to copy data from all the three channels)... 这篇关于ITK从缓冲区导入图像数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!