OpenMV项目创造一款低价,可扩展,支持Python的机器视觉模块,在很多视觉领域都有涉及应用。在参加起重机大赛中,负责图像处理部分,最为新手接触Openmv,通过多方学习,了解,探索到了一种相对比较有效、快速的分辨识别圆形,三角,矩形等色块的办法,在此分享给大家。
简单的来说,它是一个可编程的摄像头,通过MicroPython语言,可以实现你的逻辑。而且摄像头本身内置了一些图像处理算法,很容易使用。
OpenMV搭载MicroPython解释器,这允许你在嵌入式上使用Python来编程 (Python 3 to be precise). Python使机器视觉算法的编程变得简单得多。比如,直接调用find_blobs()方法,就可以获得一个列表,包含所有色块的信息。 使用python遍历每一个色块,就可以获取他们所有信息,而这些,只需要两行代码!
并且,你可以使用OpenMV专用的IDE,它有自动提示,代码高亮,而且有一个图像窗口可以直接看到摄像头的图像,有终端可以debug,还有一个包含图像信息的直方图!
对嵌入式机器视觉感兴趣的人。
对OpenMV感兴趣,并想在项目里使用OpenMV的人。
对计算机视觉感兴趣的人,通过OpenMV,可以做出一些好玩的项目,激发学习计算机视觉的兴趣,而不会卡在傅立叶变化,小波变换,滤波之类的事情上。
比赛要求识别不同颜色的图形,分别为:红色三角形、蓝色圆形、红色圆形、蓝色圆形、红色矩形、蓝色矩形。并按照相关要求抓取,并放置在指定区域。
我用的方法是,先用寻找blob色块的方式,找到红色或者蓝色的色块。
for blob in img.find_blobs(thresholds , pixels_threshold=200 , area_threshold=200):
然后对找到的色块进行密度比计算,不同的密度比对应不同的图形:
for blob in img.find_blobs(thresholds , pixels_threshold=200 , area_threshold=200):
if 0.40 < blob.density() < 0.65:
print("三角形")
if 0.65 < blob.density() < 0.80:
print("圆形")
if 0.8 < blob.density() :
print("矩形")
最后在色块区域进行像素统计,识别不同的颜色:
statistics = img.get_statistics(thresholds)
statistics = img.get_statistics(thresholds)