gpt4 book ai didi

java - 联合Java OpenCV中的两个矩形

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:40 27 4
gpt4 key购买 nike

This documentation page状态:

In addition to the class members, the following operations on rectangles are implemented: [...]

  • rect = rect1 | rect2 (minimum area rectangle containing rect2 and rect3)

但是,这段代码:

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

unionBox = box1 | box2;

导致这个错误:

Operator '|' cannot be applied to 'org.opencv.core.Rect', 'org.opencv.core.Rect'

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

最佳答案

JAVA 不支持使用运算符的 AFAIK。

我建议使用 boundingRect但是你应该知道有一个像素的差异,如下面的 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;
}

输出:

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)]

(本人对JAVA不熟悉,尝试写了下面的代码来测试)

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);

结果类似于 {10, 10, 22x22}

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

关于java - 联合Java OpenCV中的两个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36963188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com