如何在Java OpenCV中执行并集操作及解决C++转Java代码报错问题
Java OpenCV 实现C++掩码并集操作的等效代码
我来帮你搞定这个问题!你在C++里用mask1 | mask2轻松实现了掩码的并集,但Java里不能直接用位运算符操作Mat对象,得借助OpenCV提供的专门API来完成。
先回顾你给出的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;
你尝试的Java代码里,错误出在想用|直接合并两个Mat类型的掩码——因为Mat是对象,不是基本数据类型,Java不支持直接对对象使用位运算符。
下面是完全等效的Java代码:
Mat mask1 = new Mat(); Mat mask2 = new Mat(); Mat mask = new Mat(); // 生成两个HSV范围的掩码 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); // 执行并集操作:通过Core.bitwise_or实现按位或(即掩码并集) Core.bitwise_or(mask1, mask2, mask);
关于Java OpenCV中的并集操作说明:
- Java OpenCV里所有的位运算都需要通过
Core类的静态方法完成,比如bitwise_or(按位或,对应并集)、bitwise_and(按位与,对应交集)、bitwise_not(按位非)等。 Core.bitwise_or的三个参数分别是:第一个输入矩阵、第二个输入矩阵、存储结果的输出矩阵,它会逐像素对两个输入矩阵执行按位或操作,最终得到的mask就是两个掩码的并集,和C++代码的效果完全一致。
内容的提问来源于stack exchange,提问作者J.doe
相关产品推荐
相关产品推荐

