Android OpenCV端口C ++到Java

时间:2015-11-22 21:12:13

标签: java android c++ opencv

我在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();

1 个答案:

答案 0 :(得分:0)

@ phoenix37,您是否能够使Java代码正常工作?我一直在努力使一些C ++代码适应我的Android项目并取得了一些成功。我相信(在Java中)您需要将数组列表转换为数组才能访问每个元素。我知道整数数组列表也是如此。 Here are some Java constructors用于处理特定于MatOfPoint的OpenCV。我仍在努力解决这些问题,因为我对Java和OpenCV还不熟悉。我知道这不能回答你的问题,但希望能引导你走上正确的道路。