Korzystając z OpenFrameworks, OpenCV i Box2D udało mi się to osiągnąć z dobrym współczynnikiem klatek na sekundę. Korzystanie z Androida wydaje się o wiele bardziej skomplikowanym zadaniem (częściowo dlatego, że jestem nowicjuszem JAVA).Jak znaleźć kontury klatki z aparatu z Androidem i przekonwertować je na ciała box2d?
ten sposób zacząłem:
Użyj „OpenCV próbki - manipulacje obrazem” i usunąć wszystko z wyjątkiem „sprytny” efekt, który wytwarza piękny czarny & biały obraz, który jest idealnym miejscem, aby znaleźć kontury.
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 50, 100); Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4); return mRgba; }
Z „OpenCV próbki - kolor kropelka wykrywanie” Złapałem logikę znaleźć kontury w matę:
// These two lines are actually in the function onCameraViewStarted mHierarchy = new Mat(); CONTOUR_COLOR = new Scalar(255,0,0,255); // These lines are in function onCameraFrame List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Imgproc.findContours(mRgbaInnerWindow, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); Imgproc.drawContours(mIntermediateMat, contours, -1, CONTOUR_COLOR);
Tak, moja obecna funkcja wygląda tak, a nie robi „t praca:
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); if ((mRgbaInnerWindow == null) || (mGrayInnerWindow == null) || (mRgba.cols() != mSizeRgba.width) || (mRgba.height() != mSizeRgba.height)) CreateAuxiliaryMats(); Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 50, 100); //Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4); List<MatOfPoint> contours = new ArrayList<MatOfPoint>(); Imgproc.findContours(mRgbaInnerWindow, contours, mHierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); //Imgproc.drawContours(mIntermediateMat, contours, -1, CONTOUR_COLOR); return mRgba; }
teraz to gdzie jestem stucked. Ciągle dostaję wyjątki i myślę, że nie używam właściwych wymiarów ani nie przekształcam Maty w odpowiednią przestrzeń barw. Ten post ma jakiś wgląd, ale nie wiem, czy to jest poprawne: OpenCV on Android findContours throws Exception
Jakiej implementacji box2d używasz? Czy to tylko nagi jbox2d? A może używasz czegoś takiego jak ANDEngine? –
Patrzyłem na AndEngine, ale jeszcze nie wiem jak wdrożyć klasę CVCamera z SimpleGameActivity of AndEngine. –