【问题标题】:Convert Vec4i to Java openCV将 Vec4i 转换为 Java openCV
【发布时间】:2013-10-29 07:04:43
【问题描述】:

我是 Android 中 OpenCV 的新手。我正在尝试将 C++ 代码转换为 Java。我陷入了无法继续的某个点。

std::vector<cv::Vec4i> lines;
cv::HoughLinesP(bw, lines, 1, CV_PI/180, 70, 30, 10);

    // Expand the lines
    for (int i = 0; i < lines.size(); i++)
    {
        cv::Vec4i v = lines[i];
        lines[i][0] = 0;
        lines[i][1] = ((float)v[1] - v[3]) / (v[0] - v[2]) * -v[0] + v[1]; 
        lines[i][2] = src.cols; 
        lines[i][3] = ((float)v[1] - v[3]) / (v[0] - v[2]) * (src.cols - v[2]) + v[3];
    }

我转换的一半.. 到 TODO

MatOfInt4 lines= new MatOfInt4();
Imgproc.HoughLinesP(bw, lines, 1, Math.PI/180, 70, 30, 10);

int[] lineArray = lines.toArray();
// Expand the lines
//TODO 


 for (int i = 0; i < lineArray.length; i++)
    {
        int v = lineArray[i];
        lines.[i][0] = 0;
        lines[i][1] = ((float)v[1] - v[3]) / (v[0] - v[2]) * -v[0] + v[1]; 
        lines[i][2] = src.cols(); 
        lines[i][3] = ((float)v[1] - v[3]) / (v[0] - v[2]) * (src.cols() - v[2]) + v[3];
    }

我感到困惑的是在 for 循环中。当将行转换为数组时,它会给出一个 int 数组。但是在 for 循环中再次定义了 v ,它应该是一个数组。我没有明白这一点。任何人都可以帮我解决这个问题。提前谢谢你。

【问题讨论】:

  • 我已经实现了这个。但我在我的结果垫上找不到任何线条。请指导——

标签: java android c++ opencv vector


【解决方案1】:

最后我设法编写了工作代码。在this link的帮助下

    Mat lines = new Mat();
    int threshold = 70;
    int minLineSize = 30;
    int lineGap = 10;

    Imgproc.HoughLinesP(thresholdImage, lines, 1, Math.PI / 180, threshold,
            minLineSize, lineGap);

    for (int x = 0; x < lines.cols(); x++) {

        double[] vec = lines.get(0, x);
        double[] val = new double[4];

        val[0] = 0;
        val[1] = ((float) vec[1] - vec[3]) / (vec[0] - vec[2]) * -vec[0] + vec[1];
        val[2] = src.cols();
        val[3] = ((float) vec[1] - vec[3]) / (vec[0] - vec[2]) * (src.cols() - vec[2]) + vec[3];

        lines.put(0, x, val);

    }

【讨论】:

  • @ssdehero 请问你能定义什么是 thresholdImage 和 src 字段吗?
  • @ssdehero 我已经实现了这个。但我在我的结果垫上找不到任何线条。请指导
  • @ssdehero 我如何在我的 MAT android 上可视化这个?
  • 您的代码只给了我第一行(我使用的是 OpenCV 3.2)。您应该遍历.rows()(而不是.cols()),然后执行.get(x,0)(而不是.get(0,x))。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2013-08-27
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2017-07-16
相关资源
最近更新 更多