天天看点

itk DisconnectPipeline()使用说明

我是看了这个网页上的解答才有所启发的,点击打开链接

由于itk使用smart pointer智能指针,所以开辟的内存能够及时的收回,但是有些时候我们需要在后面利用某些值,这是就需要DisconnectPineline()。

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
int main(int argc, char* argv[])
{
	if (argc<3)
	{
		std::cout<<"usage:"<<argv[0]
		<<"imagefilename"<<std::endl;
	}
	typedef itk::Image<unsigned char, 2> ImageType;
	typedef itk::ImageFileReader<ImageType> ImageReaderType;
	ImageReaderType::Pointer reader = ImageReaderType::New();
	typedef itk::ImageFileWriter<ImageType> ImageWriterType;
	ImageWriterType::Pointer writer = ImageWriterType::New();

	reader->SetFileName(argv[1]);
	reader->Update();
	ImageType::Pointer image1 = reader->GetOutput();
	image1->DisconnectPipeline();
	

	reader->SetFileName(argv[2]);
	reader->Update();
	ImageType::Pointer image2 = reader->GetOutput();
	image2->DisconnectPipeline();

  writer->SetFileName("111.jpg");
	writer->SetInput(image2);
	writer->Update();

	return 0;
}
           

上面的代码简单实现了读写图像的功能,但是使用了两次reader,得到了image1和image2。如果不使用DisconnectPipeline()的话,后面读取的图像会将前面的覆盖,如果像重复利用reader,就要用这个函数。

还是跑一遍代码就清楚了。

还有一点十分重要,使用DisconnectPipeline后,后面就不属于管道的一部分了,而DisconnectPipeline则是管道的末尾,所以必须在之前加update,否则会出错。

继续阅读