繼this例子,我已經能夠togheter把這個代碼:
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的全局變量。 但它只是做任何事情。這些功能是有道理的(我也嘗試過不同的值,結果是一樣的),也許我只是忘記了一些東西讓它們工作... –