VTK 灰度图像转RGB(非渲染):vtkWindowLevelLookupTable/vtkLookupTable/vtkImageMapToWindowLevelColors

简介:系统中提取读取序列图像中的一张,用VTK将灰度图像转换为GRB,然后用GDI+绘图。懒得直接做颜色查找表,直接用VTK中的 vtkWindowLevelLookupTable/vtkLookupTable/vtkImageMapToWindowLevelColors,可完成灰度到RGB的转换。

 保存为RGB的文件如上图,代码如下:

void Gray2ColorImg()
{
	m_Origin[0] = -m_Dim[0] * m_Spacing[0] * 0.5;
	m_Origin[1] = -m_Dim[1] * m_Spacing[1] * 0.5;
	m_Origin[2] = -m_Dim[2] * m_Spacing[2] * 0.5;

	size_t fSize = m_Dim[0] * m_Dim[1] * m_Dim[2] * sizeof(short);

	//vtkImageData* input = vtkImageData::New();
	vtkNew<vtkImageData> input;
	input->SetDimensions(m_Dim[0], m_Dim[1], m_Dim[2]);
	input->SetSpacing(m_Spacing[0], m_Spacing[1], m_Spacing[2]);
	input->SetOrigin(m_Origin);
	input->AllocateScalars(VTK_SHORT, 1);
	void *ptr = input->GetScalarPointer();


	std::string m_ImgFile = "D:\\IMG-0001-00001.img";
	FILE *pFile = fopen(m_ImgFile.c_str(), "rb");
	if (pFile == NULL)
		return;

	fread(ptr, 1, fSize, pFile);
	fclose(pFile);


	long iCount = m_Dim[0] * m_Dim[1];
	// Create a greyscale lookup table
	vtkNew<vtkWindowLevelLookupTable> table;
	table->SetWindow(2326);
	table->SetLevel(180);
	table->Build();
	table->BuildSpecialColors();

	void *outPtr =malloc(iCount * 3);
	unsigned char *rgbPtr = (unsigned char *)outPtr;

	int windows = 2000;
	//for (int i = 0; i < 4; ++i)
	{
		//windows += 1000;
		//table->SetWindow(windows);
		table->MapScalarsThroughTable2(ptr, rgbPtr, VTK_UNSIGNED_SHORT, iCount, VTK_LUMINANCE, VTK_RGB);

		pFile = fopen("color2.img", "wb+");
		if (!pFile)
			return;

		fwrite(outPtr, 1, iCount * 3, pFile);
		fclose(pFile);
	}


	free(outPtr);

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值