小编bad*_*aly的帖子

Rx缓冲区自第一个新组元素以来超时

对Rx世界来说很新,我需要实现以下行为:

我需要observable来收集值并在我至少有N个项目时将它们作为列表发出,或者如果从发出第一个项目开始经过了T个时间量.

我一次又一次地阅读文档,非常确定它会使用

buffer(timespan, unit, count[, scheduler])
Run Code Online (Sandbox Code Playgroud)

但问题是这里的时间跨度取决于最后一组项目.

如果可能的话,我还需要能够冲洗(强制发射)当前缓冲区,有些项目需要立即处理.我是否正确地假设在这种情况下我需要第二个observable,在每个项目之前执行处理并合并两者?

任何的想法?

Ps:我在Java工作,但我不需要Java代码,解释就足够了.

谢谢!

system.reactive rx-java

4
推荐指数
1
解决办法
623
查看次数

从轮廓 OpenCV 检测卡片 MinArea Quadrilateral

另一个关于检测图片中的卡片。我已经成功地隔离了图片中的卡片,我有一个很近的凸包,从这里我被卡住了。

对于上下文/约束,目标:

  • 检测图片中的卡片
  • 纯色背景(见示例)
  • 固定在前面的卡片类型(意思是:我们有宽/高比)
  • 每张照片一个对象(至少现在是这样)

我使用的方法:

  1. 缩小规模
  2. 灰度
  3. 光模糊
  4. 精明
  5. 查找轮廓
  6. 删除列表中小于 120 点的所有轮廓(尝试/错误值)
  7. 案例 1:我有 1 个轮廓:我的卡片的完美轮廓:第 9 步
  8. 案例 2:我有多个轮廓
    • 凸壳
    • 近似多边形 ?
  9. ???

第1、3、6步主要是去除噪声和小伪影。

所以我几乎卡在第 9 步。我试过一个示例图片:

样本

在调试图片上:

  • 绿色:轮廓
  • 红色:凸包
  • 紫色/粉红色:使用 approxPolyDp
  • 黄色:minAreaRect

(结果图片是从minAreaRect中提取的)

所以轮廓是可以接受的,我可以通过调整 canny 或第一次模糊的参数来做得更好。但现在这是可以接受的,现在的问题是,我怎样才能得到将形成“minarea 四边形”的 4 个点。如您所见, minAreaRect 给出了一个不完美的矩形,并且 approxPolyDp 丢失了太多的卡片。

有什么线索可以解决这个问题吗?我尝试在使用 approxPolyDp(我使用arcLength*0.1)时使用 epsilon 值,但没有。

这种方法的另一个问题是在 canny 期间丢失了一个角(参见示例),它将不起作用(除非使用 minAreaRect 时)。但这可能可以在之前(通过更好的预处理)或之后解决(因为我们知道宽/高比)。

在此处输入图片说明

不是在这里要求代码,只是想知道如何解决这个问题,

谢谢!

编辑:Yves Daoust 的解决方案:

  • 从凸包中获取与谓词匹配的8个点:(最大化x, x+y, y, -x+y, -x, -xy, -y, xy)
  • 从这个八边形,取4条最长的边,得到交点

结果:

结果

编辑 2:使用 Hough 变换(而不是 …

opencv image-processing

4
推荐指数
1
解决办法
5829
查看次数