我想要使用以下规则的阈值和RGB图像:r> 1.2g&& R> 1.2b的
在opencv中有什么好办法吗?像python的过滤器一样模拟过滤器()?
我正在使用OpenCV for Java,用纯java编写它非常慢。
有任何帮助吗?谢谢!
答案 0 :(得分:0)
OpenCV没有专门的功能来执行此操作,因此您必须使用其他OpenCV功能的组合。我不知道它是否比手写循环更快,但你可以尝试一下。
第一种方法是使用split()函数。它会将3通道图像分成3个单通道图像,您可以用非常简单的方式进行比较:
thresh = (r>1.2*g) & (r>1.2*b);
当然,这种方法存在复制数据和为r,g和b图像分配临时存储器的问题。可以使用的另一个技巧将阻止内存分配和数据复制,但只能用于内存中连续的图像。它使用reshape()函数。有了它,您可以将m * n 3通道矩阵转换为3 *(m * n)1通道矩阵,而无需复制数据。通过调用此图像上的列(0),列(1)和列(2),您可以访问r,g和b图像,您可以像以前一样进行比较。
很抱歉只提供一般说明而不提供代码。我不熟悉OpenCV的Java接口(只有C ++)。