我是 openCV 的新手,我一直在研究为 Android 提供的示例。
我的目标是检测颜色斑点,所以我从颜色斑点检测样本开始。
我正在将彩色图像转换为灰度,然后使用二进制阈值进行阈值处理。
背景是白色的,斑点是黑色的。我想检测那些黑色斑点。另外,我想用彩色画出它们的轮廓,但我不能这样做,因为图像是黑白的。
我已经设法在灰度中完成了这一点,但我不喜欢如何绘制轮廓,就像颜色容差太高并且轮廓比实际的 blob 大(也许 blob 太小了?)。我猜我所说的这种“容忍度”与 setHsvColor 有关,但我不太了解这种方法。
提前致谢!此致
更新更多信息
我要跟踪的图像是墨水分裂。想象一张白色的纸,上面有黑色的墨水裂开。现在我正在实时进行(相机视图)。实际的应用程序会拍照并分析该照片。
正如我上面所说,我从 openCV GitHub 存储库中获取了 color-blob-detection 示例(android)。我在onCameraFrame方法中添加了这段代码(以便将其实时转换为黑白)。转换完成后,我不介意墨水是黑色、蓝色还是红色:
mRgba = inputFrame.rgba();
/**************************************************************************/
/** BLACK AND WHITE **/
// Convert to Grey
Imgproc.cvtColor(inputFrame.gray(), mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
Mat blackAndWhiteMat = new Mat ( H, W, CvType.CV_8U, new Scalar(1));
double umbral = 100.0;
Imgproc.threshold(mRgba, blackAndWhiteMat , umbral, 255, Imgproc.THRESH_BINARY);
// convert back to bitmap for displaying
Bitmap resultBitmap = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
blackAndWhiteMat.convertTo(blackAndWhiteMat, CvType.CV_8UC1);
Utils.matToBitmap(blackAndWhiteMat, resultBitmap);
/**************************************************************************/
这可能不是最好的方法,但它确实有效。
现在我想检测黑色斑点(墨水分裂)。我猜它们被检测到是因为 Logcat(示例应用程序的日志条目)会抛出检测到的轮廓数,但我无法看到它们,因为图像是黑白的,并且我希望轮廓是红色的,例如。
这是我使用 RGB 得到的结果(按原样进行颜色斑点检测,而不是黑白图像)。注意没有检测到小斑点。(是否有可能检测到它们?还是它们太小了?)
谢谢你的帮助!如果您需要更多信息,我很乐意更新此问题
更新:颜色斑点检测示例的 GitHub 存储库(第二张图片)