天天看點

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,否則會出錯。

繼續閱讀