【问题标题】:android color detection opencvandroid颜色检测opencv
【发布时间】:2023-03-13 07:29:02
【问题描述】:

我使用 opencv color blob detection 来检测黑色背景的小白点。当点大时它可以检测到它,但是当点变小时它无法检测到。 我认为有一个参数可以设置为颜色斑点检测样本中的小点,但我找不到。任何人都知道吗? 或者任何机构知道更好更快的检测白色的方法? 注意:在相机中只有一个白点,所有的背景都是黑色的。

这是物体很大时的照片(相机靠近物体):

http://www.axgig.com/images/14410928700656745289.png

这是物体很小的时候(相机离物体很远):

http://www.axgig.com/images/00768609020826910230.png

我要检测白点的坐标,怎么做?

【问题讨论】:

  • 我用过,但检测不到
  • 看看herehere
  • 你的图片很简单。您可以扫描整个图像,并将白点保存在矢量中。如果您需要边界框,只需将此向量传递给 cv::boundingRect(...)
  • 扫描图像获得更多时间。

标签: android image opencv image-processing


【解决方案1】:

如果整个背景的其余部分是黑色的,而您感兴趣的区域是白色的,您可以使用 Imgproc 模块中的Moments function 找到中心。你可以阅读它背后的数学at Wikipedia,但简单地说,就是对所有非零点的加权位置求和。有了Moments 结构后,您可以通过以下方式计算中心:

x = moments.m10 / moments.m00
y = moments.m01 / moments.m00

在您的情况下,使用 Android 和 OpenCV,这是您将使用的代码:

// inputMat is the Mat that you took screenshots of earlier in the question.
Moments moments = Imgproc.moments(inputMat, true);
float center_x = moments.m10 / moments.m00;
float center_y = moments.m01 / moments.m00;
// now center_x and center_y have the coordinates of the center of the blob.

【讨论】:

  • 我在黑色背景中有一个白点,我想检测点坐标。
  • 您可以使用我提供的 x 和 y 代码找到白色形状的中心。如果您对其背后的数学感兴趣,请查看 Wikipedia 链接。
  • 我不知道白色像素在哪里。我应该使用opencv的哪个函数。注意我使用了颜色斑点检测器opencv样本,但是当它变小时它无法检测到白点(你可以在图片中看到)。现在也许有一种方法可以改变我不知道的这个 blob 检测器样本,或者其他 opencv 函数。你能告诉我这两种方法中的一种吗?
  • 您不需要使用 blob 检测,因为您使用的是二进制图像。使用 Moments 函数更简单,它获取完整图像并返回白点的中心。如果我知道您使用的编程语言,我可以编写一个演示程序。
  • 我用 android 和 opencv
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 2016-10-17
相关资源
最近更新 更多