Opencv 将L形分成两条线
我想从标记中检测距离和方向。标记为L形;两条宽度和高度相等的线连接成一个L形 为了检测方向和距离,我需要将相机捕捉到的L形切割成两条线 如果代码每帧需要运行多次,那么轻量级的方法是什么 我已经使用下面描述的算法实现了blob检测: 我曾考虑过使用Hough变换,但我担心执行每一帧都需要大量的处理能力。除此之外,我认为这不是最准确的方法。我已经进行了适当的分析,以从一条直线中提取精确的向量,但不确定如何将L形切割成两条直线 下面是一张不同结果的照片,照片中的L形是如何被摄像机捕捉到的 我在想,我可以通过一条穿过边界框的质心和中心的线来分割L形,但这行不通 我认为这可能是如何做到的一个粗略的头脑风暴草图: 扫描线! 请参阅Python中的(更新的)演练,其中包含图像以可视化我在您的数据中的旅程:) 跳到“扫描线”解决方案的末尾Opencv 将L形分成两条线,opencv,image-processing,computer-vision,Opencv,Image Processing,Computer Vision,我想从标记中检测距离和方向。标记为L形;两条宽度和高度相等的线连接成一个L形 为了检测方向和距离,我需要将相机捕捉到的L形切割成两条线 如果代码每帧需要运行多次,那么轻量级的方法是什么 我已经使用下面描述的算法实现了blob检测: 我曾考虑过使用Hough变换,但我担心执行每一帧都需要大量的处理能力。除此之外,我认为这不是最准确的方法。我已经进行了适当的分析,以从一条直线中提取精确的向量,但不确定如何将L形切割成两条直线 下面是一张不同结果的照片,照片中的L形是如何被摄像机捕捉到的 我在想,我
扫描行 基础 假设 我假设这些约束来自您的示例图像
- 您的图像中有(几个)L形
- 您可以轻松地分割它们(没有重叠的形状,没有一个L到另一个L的延续…)
- 您知道Ls中线条笔划的确切宽度
新希望 在您指出需要计算速度之后,我想到了一些更多的技术,利用图像的特性对您有利 兰萨克 我曾想过在数据上使用RANSAC变体:毕竟,您希望将线拟合到点云中。 基本技术如您所知,可以用
- (随机)选择足够的数据以适合模型(在您的案例中为行)
- 评估异常值的数量(模型不适用的数据点)
- 重复并记录得分最高的模型(并在一定时间内保持记录,包括数学)
- 哪种型号?:您是用4个点定义2条线,还是用2个点定义一条线并重复两次李>
- 没有异常值:您实际上没有合适的异常值,那么为什么要在这样一个小问题上使用RANSAC呢
- 计算能力:你真的会无缘无故地进行数千次潜在的迭代,因为你在随机查看你的点
让我们考虑一下你的LS包围盒。
如果我们在Y=0处水平切片它,我们将有一个1D数组,其连续区域定义为True
那么,如果我们以这样的间隔对图像进行切片,以定义L的向量呢
设置5%作为基线,我们只需找到“哪个X指数是Y=0值的1D数组的中心”,然后对Y=0.05*img_宽度进行相同的操作
我们现在有2个2D点定义了通过图像的第一条线
在另一边重复,你就有了你的解决方案
在计算上,您只需在img\u width
length数组中找到4个中间值,
每个内存块都是来自映像的连续内存块(Heeeello二级缓存命中!)
同样,如果刚才有点难以想象,请看我的的结尾部分。您能用PNG重新发布相同的图像吗?我正试图使用你的示例图像作为我的答案,但JPEG压缩丢失了一些信息,使得很难轻松进行正确的分割=(当然,马上就来!上一张图片现在已替换为PNG。谢谢!更好=)一个答案,co