OpenFrameworks、OpenCV、Box2Dを使って、私は良いフレームレートでそれを達成することができました。 Androidを使用するのははるかに複雑な作業(私がJavaの初心者であることもあります)のようです。Androidカメラからフレームの輪郭を見つけてbox2dボディに変換する方法は?
使用「OpenCVのサンプル - 画像操作」と見つけるのが最適です素敵な黒&白画像を生成し、「気の利いた」効果、以外のすべてを削除します。
これは私が始めた方法です輪郭。 - から
public Mat onCameraFrame(CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); Imgproc.Canny(mRgbaInnerWindow, mIntermediateMat, 50, 100); Imgproc.cvtColor(mIntermediateMat, mRgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4); return mRgba; }
「OpenCVのサンプルカラーブロブ検出」私はマットで輪郭を見つけるために、ロジックをつかん:
// 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);
だから、私の現在の機能は次のようになり、それはdoesnの仕事:
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; }
ここで私はこっそりしています。私は例外を取得し続け、私は正しい次元を使用していないと思うか、またはMatを正しい色空間に変換していると思います。この投稿は、いくつかの洞察力を持っていますが、それが正しいかどうかはわからない:私はこれがないかもしれません知っているOpenCV on Android findContours throws Exception
どのbox2d実装を使用していますか?それはちょうど裸のjbox2dですか?あるいは、あなたはANDEngineのようなものを使っていますか? –
私はAndEngineを見てきましたが、AndEngineのSimpleGameActivityでCVCameraクラスを実装する方法はまだわかりません。 –