在JavaCV中将标量转换为Mat
使用JavaCV,我试图将不同的颜色应用于输入范围内两个数字之间的区域。有关如何工作的示例,请参见以下代码:在JavaCV中将标量转换为Mat,java,opencv,javacv,Java,Opencv,Javacv,使用JavaCV,我试图将不同的颜色应用于输入范围内两个数字之间的区域。有关如何工作的示例,请参见以下代码: Mat mask = new Mat(); inRange(intensity, new Scalar(0.0), new Scalar(0.3), mask); image.setTo(new Scalar(255.0, 0.0, 0.0, 1.0), mask); 但是我无法编译该代码,因为JavaCV似乎希望在inRange和setTo中使用Mat而不是Scalar对象,请参见此
Mat mask = new Mat();
inRange(intensity, new Scalar(0.0), new Scalar(0.3), mask);
image.setTo(new Scalar(255.0, 0.0, 0.0, 1.0), mask);
但是我无法编译该代码,因为JavaCV似乎希望在inRange和setTo中使用Mat
而不是Scalar
对象,请参见此处的定义:
@Namespace("cv") public static native void inRange(@ByVal Mat src,
@ByVal Mat lowerb, @ByVal Mat upperb, @ByVal Mat dst);
在OpenCV文档中,Scalar
应该是ok,而不是Mat
。有没有办法把标量
转换成Mat
这样就行了
我注意到我可以使用
cvInRangeS
而不是inRange
,但是我还没有找到一个与setTo
函数等价的函数。当使用格式不正确的Mat
调用inRange
时,应该得到的错误是OpenCV错误:输入参数的大小不匹配(下面的bounary既不是与src大小和类型相同的数组,也不是标量)
,或者是沿着这些线的某个东西(请注意拼写错误)
如果要将
Mat
用作Scalar
,可以使用double[]
或Scalar
对象初始化Mat
。例如:new Mat(new double[]{255,255,255,0})
我对JavaCV api不是很熟悉,但我也遇到了同样的问题,并通过反复试验发现了这一点。