[英]Union two rectangles in Java OpenCV
此文檔頁面指出:
除了類成員之外,還實現了對矩形的以下操作:[...]
- 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
?
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.