如何获取图像中(绘制)线的坐标数组?坐标应该与图像边界相关。输入:* .img。输出坐标数组(固定步长)。任何第三方软件都这样做?例如,存在高对比度差异 - 白色背景和黑色黑线;或红色和绿色等。
例:
答案 0 :(得分:1)
哦,你的意思是非直线。你需要定义一个“线”。直观地,您可能意味着图像的连接区域在其中轴的长度与中间轴和边缘之间的距离之间具有高纵横比(即,即使它缠绕也相对长和窄)。可能的方法:
阈值或按颜色选择。也许根据颜色直方图选择颜色,或按照此处描述的方式进行选择:Adobe Photoshop-style posterization and OpenCV,然后调用scipy.ndimage.measurements.label()
对于上面的每个区域,skeletonize。有用的教程:“Skeletonization using OpenCV-Python”。但是,您可能也需要到边缘的距离,因此请使用skimage.morphology.medial_axis(...,return_distance = True)
对骨架进行某种清理/过滤以去除短枝等。考虑到你的特殊用途,并假设你的线不绕圈,你可以找到骨架中最长的单一路径。在这里,您还可以根据骨架中最长路径相对于边缘距离的长度来判断形状是否为“线”。不知道如何在opencv中做到最好,但斐济的“Analyze Skeleton”/ ImageJ会让你按分支长度进行过滤。
剩下的是原始“线”形状中最细长的medial axis。您可以将其重新取样到您喜欢的某个步骤,或者使用样条曲线等等。
由于您想要做的事情的性质,很难想出一个适用于一系列图像的示例代码。这可能需要一些仔细的调整。我建议使用一小组图像(语料库),在其上运行任何版本的算法并手动检查结果直到它非常好,然后在大型语料库上进行尝试。
编辑:原始答案,仅适用于直线:
您可能想要使用Hough transform(OpenCV tutorial)。
Python示例代码:Horizontal Line detection with OpenCV
编辑:与示例代码相关的问题:How can I get a full medial-axis line with its perpendicular lines crossing it?