c++ - OpenCV/C++ 中的优化帮助

标签 c++ qt opencv

我正在使用 OpenCV/Qt 创建一个简单的图像处理应用程序,我正在寻找一种方法来优化我创建的代码 (https://github.com/krslynx/ImageProcessingApplication)。目前,每次在应用程序中移动 slider 时,都会调用相应的方法来更改图像,例如:

/** 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 中调用的原始图像,因此如果移动 Brightness Slider,然后移动 Contrast Slider,亮度由于 slider 取决于 this->image 而不是设置的 QLabel 像素图,因此不会保留更改。我使用以下代码“解决”了这个问题:

/** 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);
}

虽然这段代码提供了我需要的精确视觉效果,但这意味着每个 Action 事件都需要包含上述所有代码(而且我需要为我添加的每个新功能不断添加代码),我重新-处理我已经处理过的东西。在处理已移动所有 slider 的较大图像时,有时可能需要超过 1.1 秒的时间来处理。

我试图通过引用更改全局图像 this->image ,甚至为更改后的图像创建另一个全局图像但是我遇到了问题,当我移动亮度/对比度/锐度/向上/向下缩放 slider ,它会变化得太剧烈。

任何指点将不胜感激!我是 C++ 的新手!

最佳答案

创建一个单独的函数,根据 slider 的值更新图像。例如有这样的功能

void MainWiondow::generic_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);
}

您可以将每个 slider 的 Action 事件设置为该函数。如果某些 slider 需要更多功能,那么您可以制作一个不同的 Action 事件函数来调用该函数,如下所示:

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

    generic_sliderMoved();
}

关于c++ - OpenCV/C++ 中的优化帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841796/

相关文章:

Python Opencv SolvePnP 产生错误的翻译向量

c++ - 常量和 "dynamic"选项值的混合

c++ - 在 Rcpp Makevars 中设置 CXXFLAGS

C++ sprintf 输出顺序不正确

Qt Phonon 打开原始音频数据文件

image - 图像到单张和正方形的转换

c# - 如何在 EmguCV 中保存具有透明背景的图像

c++ - 如何制作 C++ 程序循环的一部分?

c++ - 无法直接将QImage添加到QGridLayout

qt - QSyntaxHighlighter-文本选择覆盖样式