使用AForge.Net识别另一个形状内的形状

时间:2012-10-22 21:06:25

标签: c# image-processing

我正在使用AForge.Net库来做一些基本的图像处理工作,作为项目的一部分。我发现在图像中识别单个几何形状(如方形,圆形等)是微不足道的。但是,当我有一个像这样的图像 image ,程序只能识别外圈。我希望它被认为是一个圆圈和一条线。

同样的另一个例子是, image1 ,程序只识别一个正方形,但我需要它将其识别为正方形和圆形。

我猜这个库本身已经过时且不再受支持,但我真的很感激一些帮助!我发现这是一个非常容易使用的库,但如果我的要求无法满足,我也会对其他库开放。 (在Java,C#或Python中)。谢谢!

1 个答案:

答案 0 :(得分:1)

使用Python执行这是一项简单的任务 您需要安装numpyscipy.ndimage等库,并且只需scipy.ndimage即可在黑色背景上提取任何形状。
因此,如果您的图像是白色背景,则需要先将其反转,这是一项简单的工作。

import scipy.ndimage  
from scipy.misc import imread           # so I can read the image as a numpy array

img=imread('image.png')        # I assume your image is a grayscale image with a black bg.  
labeled,y=scipy.ndimage.label(img)   # this will label all connected areas(shapes).  
                                         #y returns how many shapes??  

shapes=scipy.ndimage.find_objects(labeled)         
# shapes returns indexing slices for ever shape  
# So if you have 2 shapes in your image,then y=2.
# to extract the 1st shape you do like this.  
first_shape=img[shapes[0]]          # that's is a numpy feature if you are familiar with numpy .
second_shape=img[shapes[1]]  

在提取各个形状之后,您实际上可以做一些数学工作来识别它是什么?(例如圆度比>>您可以谷歌它,它对您的情况有帮助)