gpt4 book ai didi

opencv - 使用已知物体尺寸测量图片中的物体

转载 作者:太空宇宙 更新时间:2023-11-03 20:57:15 26 4
gpt4 key购买 nike

所以我需要做的是根据普通用户拍摄的图像测量脚长。该图像将包含一只穿着黑色 socks 的脚、一枚硬币(或其他已知大小的物体)和一张白纸(例如 A4),其他两个物体将放在上面。我已经拥有了什么?-我已经使用过 opencv 但只是简单的项目;-我已经开始阅读一些关于相机校准的文章("Learn OpenCv"),但仍然不知道我是否必须读到这里。

我现在需要的是一些方向,因为我仍然不明白我是否遵循正确的方法来解决这个问题。我有一些问题:我真的需要校准相机才能获得两到三个脚的尺寸吗?怎样才能找到兴趣点得到线来测量,每张图都是不同的图还是有技巧可循?

Ps: 对不起我的英语,我真的必须提高它:-/

最佳答案

首先,一些图像采集的东西:

  1. 你能指望黑色 socks 和白色背景吗?颜色并不重要,重要的是 socks 和背景之间的高对比度。
  2. 你能标准化视角吗?直接向下看脚会减少透视变形。
  3. 你能标准化场景的照明吗?这将简化下面讨论的大量处理。
  4. 最后,如果您缩放(或将相机放置得更近)以使脚填充更多图像帧,您将获得更好的估计。

分析。 (请注意,此讨论将针对您确定脚轴的问题。识别和分析硬币将使用类似的过程,但会出现一些差异。)

  1. 下一个任务是隔离感兴趣区域 (ROI)。如果您的相机俯视 footer ,则 ROI 可以限制在白色矩形内。我对这篇 Stack Overflow 帖子的回答是方形/矩形识别的良好开端:What is the simplest *correct* method to detect rectangles in an image?
  2. 如果脚完全位于白色矩形内,您可以将图像裁剪到在步骤#1 中找到的矩形。这会将图像分析限制在白皮书内的区域。
  3. 使用阈值函数“二值化”图像:http://opencv.willowgarage.com/documentation/cpp/miscellaneous_image_transformations.html#cv-threshold .如果阈值参数选择得当,您应该能够将图像缩小为黑色区域( socks 像素)和白色区域(非 socks 像素)。
  4. 现在有趣的事情开始了:您可以尝试匹配轮廓,但如果这是我的问题,我会使用边界框来快速解决问题,或者使用 moments 来获得更有趣(并且可能更可靠)的解决方案。
  5. 使用 cvFindContours 找到黑色( socks )区域的轮廓:http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#findcontours
  6. 使用 cvApproxPoly 将轮廓转换为多边形 http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#approxpoly
  7. 对于简单的解决方案,使用 cvMinRect2 为 socks 形状找到一个任意方向的边界框。盒子的短轴应该对应于 largura.jpg 中的线,盒子的长轴应该对应于 comprimento.jpg 中的线。 http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#minarearect2
  8. 如果您想要更高(可能)的准确性,您可以尝试使用 cvMoments 来计算形状的力矩。 http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#moments
  9. 使用 cvGetSpatialMoment 确定脚的轴。有关空间矩的更多信息,请参见此处:http://en.wikipedia.org/wiki/Image_moments#Examples_2在这里 http://opencv.willowgarage.com/documentation/structural_analysis_and_shape_descriptors.html#getspatialmoment
  10. 在轴已知的情况下,您可以旋转图像,使长轴与轴对齐(即垂直)。然后,您可以简单地计算水平和垂直像素以获得线条的长度。请注意,在这个面向时刻的过程中有几个假设。这是一个有趣的解决方案,但它可能无法提供更高的准确性 - 特别是因为尺寸测量的准确性在很大程度上取决于上面讨论的相机定位问题。

最后,我提供了旧 C 接口(interface)的链接。您可能会看一下新的 C++ 接口(interface)(我只是还没有抽出时间将我的代码迁移到 2.4)

关于opencv - 使用已知物体尺寸测量图片中的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398387/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com