You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:50:24