美好的一天。我正在构建一个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
上执行操作时重写代码。
任何人都可以帮我解决这个问题吗?很感谢任何形式的帮助。谢谢。
答案 0 :(得分:1)
boundingRect()
的C ++变体要求InputArray<T>
有一个接受const vector<T> &
的构造函数,因此它会隐式转换您传入vector<T>
的给定boundingRect()
InputArray<T>
。这不适用于JAVA。您必须明确地将您的ArrayList转换为MatOfPoint
,可以通过MatOfPoint.fromList(java.util.List<Point> lp)