【发布时间】:2011-10-20 20:23:32
【问题描述】:
我正在使用 OpenCV / Qt 创建一个简单的图像处理应用程序,并且我正在寻找一种方法来优化我创建的代码 (https://github.com/krslynx/ImageProcessingApplication)。目前,每次在应用程序中移动滑块时,都会调用相应的方法来更改图像,例如:
/** 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());
}
updateImage 方法更新存储图像的 QLabel (ui->pixmap)。这会带来一个问题,因为cv::Mat image / this->image 是在每个 ActionEvent 中调用的原始图像,因此如果移动亮度滑块,然后移动对比度滑块,亮度变化将不会持续,因为滑块取决于 @987654324 @ 而不是设置的 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++ 还很陌生!
【问题讨论】: