簡體   English   中英

Android OpenCV將C ++端口轉換為Java

[英]Android OpenCV port C++ to Java

我在C / C ++中使用OpenCV編寫了一個程序。 現在,我想將其移至Android平台。 我對這段代碼有疑問

Mat picture;
vector<Rect> limitsRectangle;
vector<Rect> tableRectangle;
vector<pair<float, float> > x;
void search()
{
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;
    findContours(picture, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0,0));
    limitsRectangle.clear();
    limitsRectangle.resize( contours.size() );
    vector<vector<Point> > contours_poly( contours.size() );
    for(unsigned int i = 0; i < contours.size() ; i++)
    {
        approxPolyDP( Mat(contours[i]), contours_poly[i], 100, true );
        limitsRectangle[i] = boundingRect( Mat(contours_poly[i]) );
    }
    float lb=3.84;
    float ub=6.87;
    tableRectangle.clear();
    for(unsigned int i = 0; i< limitsRectangle.size(); i++ )
    {
        float proportions = ((float)limitsRectangle[i].width/(float)limitsRectangle[i].height);
        if( (proportions > lb) && (proportions < ub))
        {
            limitsRectangle[i].x += 8;
            limitsRectangle[i].y += 0;
            limitsRectangle[i].width *= 0.95;
            limitsRectangle[i].height *= 0.9;
            tableRectangle.push_back(limitsRectangle[i]);
        }}}

以下是我設法對其進行更改的代碼段。 我不知道我的狀況如何,所以我尋求支持和幫助

Mat picture;
List<MatOfRect> limitRectangles = new ArrayList<MatOfRect>();
List<MatOfRect> tableRectangle = new ArrayList<MatOfRect>();
// vector<pair<float, float> > x; ???
void search()
{

    List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
    Mat hierarchy;
    Imgproc.findContours(resultMat, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE, new Point(0, 0));
    limitsRectangle.clear();
    // limitsRectangle.resize ??? no resize in Java

    List<MatOfPoint> contours_poly = new ArrayList<MatOfPoint>();
    // contours_poly( contours.size() ); ??? don't work

    for(int i = 0; i < contours.size() ; i++)
    {
        // Imgproc.approxPolyDP(contours[i], contours_poly[i], 100, true); ??? dont work
        // limitRectangles[i] = Imgproc.boundingRect(Mat(contours_poly[i])); ??? dont work
    }
    double lb=3.84;
    double ub=6.87;
    tableRectangle.clear();

@ phoenix37,您是否能夠使Java代碼正常工作? 我一直在嘗試將一些C ++代碼改編到我的Android項目中,並取得一些成功。 我相信(在Java中)您需要將Array List轉換為Array才能訪問每個元素。 我知道整數數組列表是正確的。 以下是一些Java構造函數,可用於特定於MatOfPoint的OpenCV。 我仍然想自己弄清楚這些,因為我對Java和OpenCV相當陌生。 我知道這不會回答您的問題,但希望可以引導您走上正確的道路。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM