其他分享
首页 > 其他分享> > robomaster视觉入门-寻找装甲板上的灯条

robomaster视觉入门-寻找装甲板上的灯条

作者:互联网

robomaster视觉入门-寻找装甲板上的灯条

上一节讲了如何对摄像头捕捉的每一帧图片进行处理,得到二值化后形状适合的灯条,但总会留下一些无法避免的轮廓干扰,这里将详细介绍如何在众多轮廓中筛选出我们需要寻找的灯条。

一.调用findContours查找函数轮廓

下面使用的函数如findContours、drawContours、minAreaRect、contourArea用法详见此处

import cv2
import numpy as np

img = cv2.imread('xxx.jpg')   #此处用本地图片替代摄像头捕捉的照片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)		#findContours只能检测二值化后的图片

contours,Hierarchy = cv2.findContours(binary,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
print (type(contours))  
print (type(contours[0])) 

>>> <class 'list'>				# 第一个返回值类型为list
	<class 'numpy.ndarray'>		# list 的中的每个元素是numpy中的ndarray

其中,第一个参数返回一个list,list中每个元素都是图像中的一个轮廓,用numpy中的ndarray(数组)表示;

第二个参数可反映各轮廓之间的的轮廓建立等级关系,一般用于大风车装甲板识别,这里基本用不上。

二.遍历所有轮廓

变量与for循环结合遍历所有轮廓,再将所有识别到的轮廓在原图中绘出,可以看见,除了我们需要寻找的灯条以外,还含有其他轮廓,为避免其他轮廓干扰,我们使用minAreaRect函数和contourArea函数得到所有轮廓最小外接矩形的一系列信息,并通过其他最小外接矩形的几何性质,筛选出装甲板上的灯条。

for cnt in range(contours[cnt]):  
    cv2.drawContours(frame, contours[cnt],-1,(255,0,0),3)           #画出灯条轮廓

在这里插入图片描述

三.筛选出装甲板上的灯条

area = cv2.contourArea(contours[cnt])

print("面积:", rect[0])

>>> 面积:area

接着,通过对轮廓面积大小、长宽比等一系列几何性质,筛选出装甲板上的灯条,具体算法出处不做赘述。

标签:robomaster,cv2,灯条,板上,print,轮廓,rect,contours
来源: https://blog.csdn.net/langanyi_/article/details/121589143