2011-10-20 2 views
0

OpenCV/Qt를 사용하여 간단한 이미지 처리 응용 프로그램을 만들고 있는데 내가 만든 코드 (https://github.com/krslynx/ImageProcessingApplication)를 최적화 할 방법을 찾고 있습니다. 현재, 각각의 시간이 슬라이더는, 예를 들어, 이미지를 변경하는 각각의 메소드 호출 애플리케이션으로 이동 다음 updateImage 방법은 영상을 저장하는 QLabel (ui->pixmap)를 업데이트OpenCV/C++의 최적화 도움말

/** ActionEvent for the brightness slider moving */ 
void MainWindow::on_brightnessSlider_sliderMoved() { 
          //setBrightness is the method called 
    updateImage(ui->pixmap, setBrightness(this->image, ui->brightnessSlider->value()); 
} 

. 이로 인해 cv::Mat image/this->image이 각 ActionEvent에서 호출되는 원시 이미지이므로 문제가 발생합니다. 따라서 밝기 슬라이더를 이동 한 다음 대비 슬라이더를 움직이면 슬라이더로 인해 밝기 변경이 유지되지 않습니다. this->image QLabel pixmap을 설정하십시오. 나는 다음과 같은 코드를 사용하여이 문제를 '해결':이 코드는 내가 필요로하는 정확한 시각 효과를 제공하는 동안

/** ActionEvent for the brightness slider moving */ 
void MainWindow::on_brightnessSlider_sliderMoved() { 

    cv::Mat result = this->image; 

    result = setBrightness(result, ui->brightnessSlider->value()); 
    result = setContrast(result, ui->contrastSlider->value()); 
    result = setSharpness(result, ui->sharpnessSlider->value()); 
    result = setZoom(result, ui->zoomSlider->value()); 

    updateImage(ui->pixmap, result); 
} 

를, 각 액션 이벤트가 그 안에 위의 코드를 모두 가질 필요가 있다는 것을 의미 (나는 필요 내가 추가하는 각각의 새로운 기능에 대한 코드를 계속 추가하기 위해), 나는 이미 처리 한 것을 다시 처리하고있다. 모든 슬라이더를 움직여서 큰 이미지를 처리 ​​할 때 처리하는 데 때때로 1.1 초가 걸릴 수 있습니다.

전역 이미지 this->image을 참조로 변경하려고 시도했지만 변경된 이미지의 또 다른 글로벌을 만들려고했지만 밝기/대비/선명도/확대/축소 슬라이더를 위/아래로 움직이면 문제가 발생했습니다. 너무 격렬하게.

모든 포인터가 크게 감사하겠습니다! 저는 C++을 처음 접했습니다!

답변

2

슬라이더 값에 따라 이미지를 업데이트하는 별도의 함수를 만듭니다. 예를 들면 다음과 같은 기능을 가지고 있습니다.

각 슬라이더의 동작 이벤트를이 기능으로 설정할 수 있습니다. 일부 슬라이더가이 이상의 기능을 추가로 필요로하는 경우 다음과 같은 함수를 호출하는 다른 액션 이벤트 함수를 만들 수 있습니다.

/** ActionEvent for the brightness slider moving */ 
void MainWindow::on_brightnessSlider_sliderMoved() { 
    /* brightness slider specific code */ 

    generic_sliderMoved(); 
}