Как переводится этот код в OpenCV Java?

0

Этот код является OpenCV c++:

lines = cvHoughCircles(frame2, storage, CV_HOUGH_GRADIENT, 1, 50, 300, 60, 10, 600);
for (int i = 0; i < lines.total(); i++) {
    //Would like the code to go here
     CvPoint2D32f point = new CvPoint2D32f(cvGetSeqElem(lines, i));
     cvCircle(src, cvPoint((int)point.x(), (int)point.y()), 3, CvScalar.WHITE, -1, 8, 0);
     Point p = new Point((int)point.x(), (int)point.y());
     points.add(p);
}

Что такое корреспондент в новом Java Api? Я не могу получить CvPoint2D32f, cvGetSeqElem и CV_AA. Я обнаружил, что существует в JavaCV, но не может найти их в OpenCV Java api.

благодаря

РЕДАКТИРОВАТЬ:

Я изменил свой код, и теперь у меня есть:

MatOfPoint3 circles = new MatOfPoint3();
Imgproc.HoughCircles(image, circles, Imgproc.CV_HOUGH_GRADIENT,2, image.rows()/4,200,100,0,0);
for(Point3 circle : circles.toArray()){
     Point center = new Point(circle.x, circle.y);
     int radius = (int) Math.round(circle.z);      
     Core.circle(image, center, radius, new Scalar(0,255,0), 6, 8, 0);    
}

Однако я получил ошибку for(Point3 circle: circles.toArray()):

Exception in thread "main" java.lang.UnsupportedOperationException: Mat data type is not compatible: 21
     at org.opencv.core.Mat.get(Mat.java:2581)
     at org.opencv.core.MatOfPoint3.toArray(MatOfPoint3.java:64)
     at org.opencv.core.MatOfPoint3.toList(MatOfPoint3.java:76)
     at main.java.DetectFaceDemo.run(HelloOpenCV.java:60)
at main.java.HelloOpenCV.main(HelloOpenCV.java:83)

Любые мысли по этому поводу? благодаря

EDIT 2:

Решение последней проблемы редактирования находится в MatOfPoint3 circles = new MatOfPoint3();

Это должно быть MatOfPoint3f circles = new MatOfPoint3f();

Теги:
opencv

1 ответ

1
Лучший ответ

Используйте класс Point3. Класс шаблонов для трехмерных точек, заданных его координатами x, y и z. Экземпляр класса является взаимозаменяемым с C-структурой CvPoint2D32f. Аналогично Point_, координаты трехмерных точек могут быть преобразованы в другой тип. Также поддерживаются векторные арифметические операции и операции сравнения.

  • 0
    А как насчет cvGetSeqElem и CV_AA ? Я не могу их найти. Спасибо
  • 0
    Думаю, мне не нужен cvGetSeqElem . У меня есть это: for(Point3 circle : circles.toArray()){ Point center = new Point(circle.x, circle.y); int radius = (int) Math.round(circle.z); Core.circle(image, center, radius, new Scalar(0,255,0), 6, CV_AA, 0); } теперь только CV_AA отсутствует

Ещё вопросы

Сообщество Overcoder
Наверх
Меню