Qt + VTK를 사용하여 C++ 응용 프로그램을 개발 중입니다. 사실, 나는 QVTKWidget을 가지고 있는데, 이것은 DICOM 이미지를 디스플레이하는데 사용된다. 나는 vtkImageViewer2과 vtkInteractorStyleImage을 사용했기 때문에 왼쪽 버튼을 누른 상태에서 이미지를 마우스로 클릭하여 밝기와 대비를 변경할 수 있습니다.VTK의 밝기와 대비를 복원하는 방법은 무엇입니까?
그러나 밝기와 대비를 원래 값으로 복원하려면 버튼을 사용하고 싶습니다. 몇 가지 연구를 해봤지만, 문서, 문서에서 밝혀진 밝기 및 명암 대비 값과 관련하여 런타임에 변경할 수있는 기능을 찾을 수 없습니다.
누군가 도와 드릴 수 있기를 바랍니다. 고맙습니다.
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();
}
가 지금은 (밝기 및 대비가 원래 값을 얻을) 작동하지만 난 완전히 그 뒤에 논리를 이해하지 않은 :
get/setColorLevel 및 get/setColorWindow를 시도 했습니까? –
도움을 주셔서 대단히 감사합니다. 늦게 회신을 드려서 죄송합니다. 불행히도, 그러나, 그것은 작동하지 않는 것 같습니다. 나는이 코드를 시도했다 : '무효 MainWindow를을 :: on_luminosityResetButton_clicked() {' 'imageViewer-> SetColorLevel (128);' 'imageViewer-> SetColorWindow (255);' 'UI-> qvtkWidget- > update();' '}' 입니다. 여기서 imageViewer는 vtkSmartPointer 유형의 전역 변수입니다. 하지만 단순히 모든 작업을 수행합니다. 그 함수들은 의미가 있습니다. (다른 값으로 시도해 봤는데도 결과는 같습니다.) 어쩌면 그 함수가 작동하도록하는 것을 잊어 버렸을 것입니다 ... –