【问题标题】:Code optimization for Opencv AndroidOpencv Android 的代码优化
【发布时间】:2012-09-29 04:49:53
【问题描述】:

我在 Android 上使用这个 opencv 代码进行强度均衡。执行时间约为每帧 300 毫秒 (720x480)。有人对可能的时间优化有想法吗?

代码如下:

        cvtColor(image, hsvImage, CV_BGR2HSV);
        // Get intensity
        intensity = hsvImage.at<Vec3b>((int)reference.Point_::y, (int)reference.Point_::x);
        float value = (float)REGULAR_INTENSITY / intensity[2];
        float saturation = (float)REGULAR_SATURATION / intensity[1];
        if (counter == 15 && (int)intensity[2] < REGULAR_INTENSITY) {
            equalization = false;
        }
        // Modify intensity
        float transformedSaturation, transformedValue;
        for(int i = 0; i < hsvImage.rows; i++) {
            unsigned char *data = hsvImage.ptr(i);
            for(int j = 0; j < hsvImage.cols; j++) {
                transformedSaturation = (uchar)*++data * saturation;
                if (transformedSaturation > MAX_COLOR) {
                    transformedSaturation = MAX_COLOR;
                }
                *data++ = transformedSaturation;
                transformedValue = (uchar)*data * value;
                if (transformedValue > MAX_COLOR) {
                    transformedValue = MAX_COLOR;
                }
                *data++ = transformedValue;
            }
        }
        cvtColor(hsvImage, image, CV_HSV2BGR);

【问题讨论】:

  • 你有没有发现哪段代码消耗的时间最多?在 cvtColor 和主循环上花费了多少时间?
  • 最后一行:CV_HSV2BGR转换。我认为没有什么可以做的。
  • 考虑使用 gpu::cvtColor 进行颜色转换,如果适用的话。

标签: android c++ optimization image-processing opencv


【解决方案1】:

您是否尝试过使用 OpenCV transform ?我猜它是优化的,但我不知道饱和投射(即 if > max_color, then = max color)

【讨论】:

  • 谢谢,但正如你所见,我正在与一个依赖于 src 数组的数组相乘,它不是静态的。
  • 正如我所见,您计算了强度、值、饱和度的乘数,并使用这些值来均衡全部数据。所以你只需要创建一个 1x3 矩阵,用强度、饱和度、值填充它并调用 cv::transform!
猜你喜欢
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
相关资源
最近更新 更多