在JavaCV中将标量转换为Mat

在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对象,请参见此

使用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
对象,请参见此处的定义:

@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不是很熟悉,但我也遇到了同样的问题,并通过反复试验发现了这一点。