【问题标题】:Corn Tree Counting with OpenCV使用 OpenCV 进行玉米树计数
【发布时间】:2017-11-06 14:40:09
【问题描述】:

如何根据下图用opencv准确统计玉米树?我已经尝试使用 inRange 进行 HSV 转换,但到目前为止一无所获。

有没有一种方法可以正确计算树木数量?即使降噪,我认为它也不会算作财产。

【问题讨论】:

  • 尝试一些模板匹配...
  • 你能给我举个例子吗?

标签: opencv counting


【解决方案1】:

我选择了一个模板如下... 当我尝试运行模板匹配时,我得到了以下匹配.. 匹配很好,因为我从图像的那部分选择了模板。但是,当阈值编辑时,包含完整图像不同区域匹配程度值的结果图像看起来像这样.. 因此,您可以看到,如果您计算白色斑块(忽略小噪音),您几乎可以得到可能的作物数量......!!

编辑

如果您尝试在RGB图像的绿色平面

中进行模板匹配,您可以获得更精确的结果

【讨论】:

  • 如何忽略小噪音(忽略较小的白点)?
  • 1) 如何在全图的不同区域应用匹配程度? 2)您是否只使用了一种灰度转换? 3)你做了什么样的门槛?
  • findContours() 在这种情况下没有解决计数问题。
  • 我已经应用了模板匹配。但是,我无法获得像您这样的结果(带有白色斑块的黑白图像)。
  • 好吧,我会很感激的 :-)
【解决方案2】:

实施几个简单的预处理步骤后,您的问题更容易解决。看看我得到的结果:

步骤:

  • 将 RGB 转换为 LAB 图像
  • 提取 A 通道(丢弃 L、B 通道)
  • 拉伸/最大化图像对比度
  • 使用 Otsu 的最佳阈值选择进行二值化
  • 反转图像,使前景为白色,背景为黑色

基于此图像模板匹配或其他检测方法应该会更好。

【讨论】:

  • 好的,小白点和右下角的那个呢?我应该使用 findContour 来计算它们吗?
  • 左上角的小点其实是植物。要摆脱其他较小的点,您可以使用侵蚀过滤器。我现在不想谈第二阶段的细节。这取决于你:-)。
  • 我将在几分钟后发布我的代码 - 我是这个计算机视觉主题的新手(只知道基础知识)。
  • 我已经用源代码更新了我在顶部的帖子。大津的门槛和侵蚀对我来说都是新闻:-)
  • #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; int main() { Mat src = imread("corn.jpg"); if (src.empty()) { return -1; } Mat lab; cvtColor(src, lab, CV_BGR2Lab); imshow("LAB", lab); return 0; } 我真的很坚持
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 2016-02-17
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 2010-12-23
相关资源
最近更新 更多