使用 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 每个通道的平均值,应该比您的代码更快。
为了计算给定帧的平均 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 每个通道的平均值,应该比您的代码更快。