Java OpenCV中两个矩形的并集

Java OpenCV中两个矩形的并集,java,opencv,operator-overloading,Java,Opencv,Operator Overloading,国家: 除了类成员之外,还可以对 矩形被实现为: [……] rect=rect1 | rect2(包含rect2和rect3的最小面积矩形) 但是,该代码: Rect box1 = new Rect(); Rect box2 = new Rect(); Rect unionBox = new Rect(); unionBox = box1 | box2; 导致此错误的原因: 运算符“|”不能应用于“org.opencv.core.Rect”、“org.opencv.core.Rect”

国家:

除了类成员之外,还可以对 矩形被实现为: [……]

  • rect=rect1 | rect2(包含rect2和rect3的最小面积矩形)
但是,该代码:

Rect box1 = new Rect();
Rect box2 = new Rect();
Rect unionBox = new Rect();

unionBox = box1 | box2;
导致此错误的原因:

运算符“|”不能应用于“org.opencv.core.Rect”、“org.opencv.core.Rect”


如何正确地合并两个(或更好:多个)
Rect
s?

JAVA不支持使用运算符的AFAIK

<>我建议使用,但是你应该知道,在

下面的C++代码中有一个像素差异。
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    Rect a(10,10,20,20);
    Rect b(11,11,20,20);

    vector<Point> pts;

    pts.push_back(a.tl());
    pts.push_back(a.br());

    pts.push_back(b.tl());
    pts.push_back(b.br());

    Rect boundingRect_result = boundingRect( pts );
    Rect operator_result = a | b;

    cout << "Rect a: " << a << endl;
    cout << "Rect b: " << b << endl;

    cout << "\nRect Points a b:\n" << pts << endl;

    cout << "\nboundingRect result : " << boundingRect_result << endl;
    cout << "result a | b        : " << operator_result << endl;

    return 0;
}
(我不熟悉JAVA,但尝试编写下面的代码进行测试)

结果就像
{10,10,22x22}

另一种选择是用JAVA编写自己的函数。可以转换为JAVA的

Rect a: [20 x 20 from (10, 10)]
Rect b: [20 x 20 from (11, 11)]

Rect Points a b:
[10, 10;
 30, 30;
 11, 11;
 31, 31]

boundingRect result : [22 x 22 from (10, 10)]
result a | b        : [21 x 21 from (10, 10)]
Rect r1 = new Rect(10,10,20,20);
Rect r2 = new Rect(11,11,20,20);

Point[] rects_pts = new Point[4];
rects_pts[0] =  r1.tl();
rects_pts[1] =  r1.br();
rects_pts[2] =  r2.tl();
rects_pts[3] =  r2.br();

MatOfPoint mof = new MatOfPoint();
mof.fromArray(rects_pts);

Rect union = Imgproc.boundingRect(mof);
System.out.print( union);