我正在使用Qt + VTK开发一个C++应用程序。实际上,我有一个QVTKWidget,用于显示DICOM图像。我使用了一个vtkImageViewer2和一个vtkInteractorStyleImage,,所以我可以通过点击鼠标改变图像的亮度和对比度,同时按下左边的按钮。
但是,我希望启用一个按钮,用于恢复亮度和对比度的原始值。我做了一些研究,但在文档中找不到任何关于它的功能,也找不到任何可以在运行时更改的亮度和对比度值。
我希望有人能帮忙。谢谢。
发布于 2013-08-27 14:44:35
按照这示例,我已经能够将此代码放置在以下位置:
void MainWindow::on_luminosityResetButton_clicked()
{
vtkSmartPointer<vtkImageShiftScale> shiftScaleFilter =
vtkSmartPointer<vtkImageShiftScale>::New();
shiftScaleFilter->SetOutputScalarTypeToUnsignedChar();
#if VTK_MAJOR_VERSION <= 5
shiftScaleFilter->SetInputConnection(imageData->GetProducerPort());
#else
shiftScaleFilter->SetInputData(imageData);
#endif
shiftScaleFilter->SetShift(0);
shiftScaleFilter->SetScale(0);
shiftScaleFilter->Update();
// Create actors
vtkSmartPointer<vtkImageSliceMapper> originalSliceMapper = vtkSmartPointer<vtkImageSliceMapper>::New();
#if VTK_MAJOR_VERSION <= 5
originalSliceMapper->SetInputConnection(imageData->GetProducerPort());
#else
originalSliceMapper->SetInputData(imageData);
#endif
vtkSmartPointer<vtkImageSlice> originalSlice = vtkSmartPointer<vtkImageSlice>::New();
originalSlice->SetMapper(originalSliceMapper);
vtkSmartPointer<vtkImageSliceMapper> shiftScaleMapper = vtkSmartPointer<vtkImageSliceMapper>::New();
shiftScaleMapper->SetInputConnection(shiftScaleFilter->GetOutputPort());
vtkSmartPointer<vtkImageSlice> shiftScaleSlice = vtkSmartPointer<vtkImageSlice>::New();
shiftScaleSlice->SetMapper(shiftScaleMapper);
shiftScaleSlice->GetProperty()->SetInterpolationTypeToNearest();
renderer->AddViewProp(originalSlice);
vtkSmartPointer<vtkRenderer> shiftScaleRenderer =
vtkSmartPointer<vtkRenderer>::New();
shiftScaleRenderer->AddViewProp(shiftScaleSlice);
ui->qvtkWidget->update();
}
现在它起作用了(亮度和对比度获得了它们的原始值),但是我还没有完全理解它背后的逻辑。所以,我不把自己的答案标记为正确的答案(希望得到一个更贴切的答案),但我还是把它发了出来。我在其他地方也看到了同样的问题(没有得到回答),我希望它能对其他人有用。
https://stackoverflow.com/questions/17313709
复制相似问题