作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个 Android 应用程序,它使用 Android 版 OpenCV 计算可见的多米诺骨牌的所有点的总和 - 如图所示。
问题是,我找不到一种方法来过滤其他轮廓并只计算我在多米诺骨牌中看到的点,我尝试使用 Canny 边缘查找然后使用 HoughCircles,但没有结果,因为我没有岩石的绝对俯 View 和 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;
}
编辑:
阈值后我的轮廓的一个独特特征是它们从内部完全是黑色的,无论如何我可以计算给定轮廓的平均颜色/强度吗?
最佳答案
SO 上有一个类似的问题和可能的解决方案,标题为 Detection of coins (and fit ellipses) on an image .在这里你会找到一些关于 opencv 函数 fitEllipse
的推荐。
你应该看看this for more info on opencv's function fitEllipse
.
此外,要仅检测图像中的黑色元素,您可以使用 HSV 颜色模型,以仅查找黑色。你可以find an explanation here .
关于java - OpenCV:多米诺骨牌圆点/圆盘检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14058366/
我是一名优秀的程序员,十分优秀!