我有一个问题,我想告诉你,因为有些日子我没有新想法。
我有一个带有双*指针的图像,我想把它翻译成itk :: smartpointer来更新用户图形界面,为此我制作了这个方法:
void prueba_r01::double2itk( double *im_proc, ImageType::Pointer *salida, int alto, int ancho)
// This method translate the double* image into itk:smartpointer image
ImageType::IndexType pixelIndex; // pixelIndex[0]= index x-axis; pixelIndex[1] = index y-axisy
ImageType::PixelType pixelValue;
ImageType::PixelType aux; //auxiliar variable for checking the behaviour of the programm
// Doing a sweep of all the image (is in double *im_proc) translating the values into itk pointer format
for (int x=0; x<ancho; x++){ // ancho: widht of the image
pixelIndex[0]=x;//x position
for (int y=0; y<alto; y++){ // alto: height of the image
pixelIndex[1]=y;//y position
pixelValue= *(im_proc+x+ancho*y);
(*salida)->SetPixel(pixelIndex,pixelValue);
aux = (*salida)->GetPixel(pixelIndex); // checking that the image has been correctly transtaled from im_proc to salida-- > CHECKED
}
}
}
然后在这里被称为:
//Translation of the double* image into itk:smartpointer image
double2itk(out_inv, &(ui.imageframe->imagereader), alto, ancho);
之后,用户界面会更新:
// Update of the image shonw in the user interface
ui.imageframe->update();
问题是看起来一切正常,但界面中的图像没有更新。 对我的项目有效的另一个选项可能是将图像存储在'.bmp'或'.jpeg'文件中。 有人能帮助我吗?什么不正常的想法?是否有创建此图像文件的功能?
答案 0 :(得分:2)
ITK拥有内置的机制,具有一些相当大的安全优势。另外:它们可以像任何图像源一样在管道中使用,并且因为它们使用现有的数组,所以它们(我认为)比循环遍历索引要快得多。
http://www.itk.org/Doxygen/html/classitk_1_1ImportImageFilter.html
http://www.itk.org/Doxygen/html/classitk_1_1ImportImageContainer.html
答案 1 :(得分:1)
您必须使用ImportImageContainer,并且在设置内存管理选项时要非常小心。
默认情况下,ITK会自行清理,并希望能够删除外部指针指向的内存。
“用户指南”中有此示例。
还有一个非常好的wiki示例