OpenCV:多米诺骨牌圆点/磁盘检测

我正在开发一款Android应用程序,可以使用OpenCV for Android来计算正在显示的多米诺骨牌的所有点的总和。

一个样品

问题是,我无法find一种方法来过滤其他轮廓,只计算我在多米诺骨牌中看到的点,我尝试使用Canny边缘查找,然后使用HoughCircles,但没有结果,因为我没有一个绝对的顶部岩石和HoughCircles的视图只检测完美的圈子:)

这是我的代码:

public Mat onCameraFrame(Mat inputFrame) { inputFrame.copyTo(mRgba); Mat grey = new Mat(); // Make it greyscale Imgproc.cvtColor(mRgba, grey, Imgproc.COLOR_RGBA2GRAY); // init contours arraylist List<MatOfPoint> contours = new ArrayList<MatOfPoint>(200); //blur Imgproc.GaussianBlur(grey, grey, new Size(9,9), 10); Imgproc.threshold(grey, grey, 80, 150, Imgproc.THRESH_BINARY); // because findContours modifies the image I back it up Mat greyCopy = new Mat(); grey.copyTo(greyCopy); Imgproc.findContours(greyCopy, contours, new Mat(), Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_NONE); // Now I have my controus pefectly MatOfPoint2f mMOP2f1 = new MatOfPoint2f(); //a list for only selected contours List<MatOfPoint> SelectedContours = new ArrayList<MatOfPoint>(400); for(int i=0;i<contours.size();i++) { if(here I should put a condition that distinguishes my spots, eg: if contour inside is black and is a black disk) { SelectedContours.add(contours.get(i)); } } Imgproc.drawContours(mRgba, SelectedContours, -1, new Scalar(255,0,0,255), 1); return mRgba; } 

编辑:

我之后轮廓线的一个独特之处在于它们从内部完全是黑色的,反正我可以计算给定轮廓的平均颜色/强度吗?

Solutions Collecting From Web of "OpenCV:多米诺骨牌圆点/磁盘检测"

在图像上有一个类似的问题和可能的解决scheme,标题为检测硬币(和适合椭圆) 。 在这里你会发现一些关于opencv函数fitEllipse

你应该看看这个更多关于opencv函数fitEllipse

另外,为了仅检测图像中的黑色元素,可以使用HSV颜色模型来仅查找黑色。 你可以在这里find解释 。