2016-05-01 7 views
2

This documentation page状態:連合の2つのJava OpenCVの中の長方形

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; 

は、このエラーにつながる:(2私が正しく組合にはどうすればよい

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

またはそれ以上:多く)Rect

答えて

2

オペレータを使用するAFAIKは、JAVAではサポートされていません。

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

結果はのようです

別のオプションは、Javaで独自の関数を記述しています。 here is OpenCV sourceは、Javaに変換することができます

関連する問題