如何在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++
代码相同的结果,结果完全不正确。还要检查主要的代码源以便更好地理解@scigsmask1
和mask2
是两个数组nomask1
和mask2
不是数组,它们是Mat类型的数组
smth为指定矩阵的openCV制作,mask1.nativeObj
生成大量类型long
System.out.println(mask1.nativeObj);//140424926904688
还要检查主要的代码源,以便更好地理解@scigsmask1
和mask2
是两个数组nomask1
和mask2
不是数组,它们是为指定矩阵的openCV制作的Mat
smth类型ngSystem.out.println(mask1.nativeObj);/140424926904688