使用 Frame Mat OpenCV 检测颜色的有效方法 Java

Efficient way to detect color using Frame Mat OpenCV Java

为了计算给定帧的平均 rgb 颜色,我对每个循环使用以下方法来获取平均颜色。

    for (int i = 0; i < pFrame.cols(); i++) {
                    for (int j = 0; j < pFrame.rows(); j++) {
                        int pixel_rgb_avg = ((int)(pFrame.get(i, j)[0] + pFrame.get(i, j)[1] + pFrame.get(i, j)[2]) / 3);
                        r_curr += pFrame.get(i, j)[0];
                        g_curr += pFrame.get(i, j)[1];
                        b_curr += pFrame.get(i, j)[2];
                        counter_curr += 1;

                    }
    }
    r_curr = r_curr/ counter_curr;
    g_curr = g_curr/ counter_curr;
    b_curr = b_curr/ counter_curr;

这很好用,但是这个任务必须实时完成。根据 matsize 的不同,完成此过程可能需要很长时间,这可能是由每次迭代调用三次的 get() 方法引起的。 (在后台线程中完成)

有谁知道更有效的方法吗?

mean() returns 每个通道的平均值,应该比您的代码更快。