Android OpenCV - 将OpenCV C ++代码转换为Android以检测QR码对齐方块

时间:2015-05-30 03:44:47

标签: android c++ opencv

美好的一天。我正在构建一个Android应用程序,我的目标是使用OpenCV for Android扫描表单。我打算使用QR码使用的相同概念,对齐方块,以确保每次都能正确进行扫描。

我知道我可以使用ZXing Library,但是,我没有使用QR码。在我对其进行图像处理之前,我只是借用了对齐方形的想法。

我找到this blog,其中他使用OpenCV C ++库找到对齐方块,然后重新对齐图像并输出重新对齐的QR码。 His C++ Code can be found in his github here.除了我在大学收到的课程之外,我没有太多关于C ++的背景知识,而且我没有在C ++中使用OpenCV的经验。我理解大部分代码都试图这样做,但是,当我在主函数之外转换函数时,我遇到了这个问题:

void cv_getVertices(ArrayList<ArrayList<Point>> contours, int c_id, float slope, ArrayList<Point> quad){
    Rect box = Imgproc.boundingRect(contours.get(c_id)); //<-- problematic code
    //more code here
}

原始代码是:

void cv_getVertices(vector<vector<Point> > contours, int c_id, float slope, vector<Point2f>& quad){
    Rect box;
    box = boundingRect( contours[c_id]);

    //more code here
}

但是,我收到错误,因为Imgproc.boundingRect(contours.get(c_id));正在寻找MatOfPoint对象,而我的contours ArrayList由点组成。

注意:我必须更改他的许多代码,例如将vectors更改为ArrayLists,以及在Points上执行操作时重写代码。

任何人都可以帮我解决这个问题吗?很感谢任何形式的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

boundingRect()的C ++变体要求InputArray<T>有一个接受const vector<T> &的构造函数,因此它会隐式转换您传入vector<T>的给定boundingRect() InputArray<T>。这不适用于JAVA。您必须明确地将您的ArrayList转换为MatOfPoint,可以通过MatOfPoint.fromList(java.util.List<Point> lp)