如何在java opencv中执行联合操作

如何在java opencv中执行联合操作,java,opencv,image-processing,bitwise-operators,Java,Opencv,Image Processing,Bitwise Operators,我需要编写一个等价的javaopencv代码,就像这个C++代码一样 Mat1b mask1, mask2; inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1); inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2); Mat1b mask = mask1 | mask2; 当我试图使用|操作符时,它导致了一个错误 Mat mask1 = new M

我需要编写一个等价的
javaopencv
代码,就像这个
C++
代码一样

Mat1b mask1, mask2;
inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

Mat1b mask = mask1 | mask2;
当我试图使用
|
操作符时,它导致了一个错误

Mat mask1 = new Mat();
Mat mask2 = new Mat();
Core.inRange(hsv, new Scalar(0, 70, 50), new Scalar(10, 255, 255), mask1);
Core.inRange(hsv, new Scalar(170, 70, 50), new Scalar(180, 255, 255), mask2);

Mat hsvThres = mask1 | mask2;

错误:
未为参数类型org.opencv.core.Mat定义运算符

我认为您误会的是您试图比较两个
Mat
对象引用,而不是它们下面的值。我对openCV不太熟悉,但我猜您正在尝试将它们下面的值组合起来,这样您就可以使用该方法了。该行将被改写为:

Mat hsvThres=新的Mat(mask1.nativeObj | mask2.nativeObj);

我想你搞错了,你试图比较两个
Mat
对象引用,而不是它们下面的值。我对openCV不太熟悉,但我猜您正在尝试将它们下面的值组合起来,这样您就可以使用该方法了。该行将被改写为:

Mat hsvThres=新的Mat(mask1.nativeObj | mask2.nativeObj);

联合运算符,
逻辑或(|)
用于OpenCV的两个矩阵:

C++中的代码:

inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

Mat mask = mask1 | mask2; 
Java代码:

Mat mask1 = new Mat();
Mat mask2 = new Mat();
Core.inRange(hsv, new Scalar(0, 70, 50), new Scalar(10, 255, 255), mask1);
Core.inRange(hsv, new Scalar(170, 70, 50), new Scalar(180, 255, 255), mask2);

Mat mask= new Mat();
Core.bitwise_or(mask1, mask2, mask);
Python代码:

mask1 = cv2.inRange(hsv, (0, 70, 50), (10, 255, 255))
mask2 = cv2.inRange(hsv, (170, 70, 50), (180, 255, 255))
mask = cv2.bitwise_or(mask1, mask2)

联合运算符,
逻辑或(|)
用于OpenCV的两个矩阵:

C++中的代码:

inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

Mat mask = mask1 | mask2; 
Java代码:

Mat mask1 = new Mat();
Mat mask2 = new Mat();
Core.inRange(hsv, new Scalar(0, 70, 50), new Scalar(10, 255, 255), mask1);
Core.inRange(hsv, new Scalar(170, 70, 50), new Scalar(180, 255, 255), mask2);

Mat mask= new Mat();
Core.bitwise_or(mask1, mask2, mask);
Python代码:

mask1 = cv2.inRange(hsv, (0, 70, 50), (10, 255, 255))
mask2 = cv2.inRange(hsv, (170, 70, 50), (180, 255, 255))
mask = cv2.bitwise_or(mask1, mask2)

有帮助吗?不幸的是没有:(怎么样?问题是我处理的是矩阵而不是数组,它对MatThank不起作用。谢谢你的帮助,我从你提供的文档
Core.bitwise_或(mask1,mask2,hsvThres)中试过了)
但我不知道为什么它没有提供与
C++
代码相同的结果,结果完全不正确。有帮助吗?不幸的是没有:(怎么办?问题是我处理的是矩阵而不是数组,这对MatThank不起作用。谢谢你的帮助,我从你提供的
Core.bitwise_或(mask1,mask2,hsvThres)文档中试过了。)
但我不知道为什么它没有提供与
C++
代码相同的结果,结果完全不正确。还要检查主要的代码源以便更好地理解@scigs
mask1
mask2
是两个数组no
mask1
mask2
不是数组,它们是
Mat类型的数组
smth为指定矩阵的openCV制作,
mask1.nativeObj
生成大量类型
long
System.out.println(mask1.nativeObj);//140424926904688
还要检查主要的代码源,以便更好地理解@scigs
mask1
mask2
是两个数组no
mask1
mask2
不是数组,它们是为指定矩阵的openCV制作的
Mat
smth类型ng
System.out.println(mask1.nativeObj);/140424926904688