Android OpenCV - 确定MatOfPoint是否包含一个点

时间:2015-06-04 10:16:40

标签: android opencv opencv4android

美好的一天。我正在使用Android的OpenCV3库,我能够成功扫描某种颜色的颜色斑点。

我尝试扩展此功能,以便能够通过对我想要的HSV值进行硬编码来扫描由特定颜色着色的网格中的轮廓。我接下来要做的是能够确定我的轮廓中是否包含Point。

mDetector.process(inputMat); //inputMat is the mat that I process.
List<MatOfPoint> contours = mDetector.getContours();

Mat colorLabel = inputMat.submat(4, 68, 4, 68);
colorLabel.setTo(mBlobColorRgba);

Mat spectrumLabel = inputMat.submat(4, 4 + mSpectrum.rows(), 70, 70 + mSpectrum.cols());
mSpectrum.copyTo(spectrumLabel);

MatOfPoint2f approxCurve = new MatOfPoint2f();

//For each contour found
for (int i = 0; i < contours.size(); i++) {
    //Convert contours(i) from MatOfPoint to MatOfPoint2f
    MatOfPoint2f contour2f = new MatOfPoint2f( contours.get(i).toArray() );

    //Processing on mMOP2f1 which is in type MatOfPoint2f
    double approxDistance = Imgproc.arcLength(contour2f, true)*0.02;
    Imgproc.approxPolyDP(contour2f, approxCurve, approxDistance, true);

    Imgproc.drawContours(inputMat, contours, -1, new Scalar(0, 150, 0));

    Point p = new Point(x,y);
}

现在我不知道如何继续检查我的contours列表(MatOfPoint)是否包含某个点p。我检查了MatOfPoint的文档,看起来它没有一种简单的方法来检查它是否包含某个点。

任何人都可以帮我解决我的问题吗?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您必须使用在实用程序类Imgproc中声明的方法pointPolygonTest