首页 文章详情

基于OpenCV的实战:轮廓检测(附代码解析)

小白学视觉 | 478 2021-09-03 14:57 0 0 0
UniSMS (合一短信)

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上。如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象。
每当在框架中检测到物体时,都会为该物体绘制轮廓,该轮廓将代表物体的轮廓。下一步是找到对象的质心,标识找到影像矩所需的质心坐标,图像力矩是图像像素强度的加权平均值。
因此,我们考虑考虑轮廓内的区域以找到图像矩,如果轮廓中的图像矩变为M,则可以按以下方式计算质心的坐标:

cx = int(M ['m10'] / M ['m00'])
cy = int(M ['m01'] / M ['m00'])

获得质心点后,此质心点将表示对象这样就可以为与质心相对应的对象放置一个边界框。本次实验我们将使用橙色作为对象,首先我们需要安装打包的OpenCV和numpy软件包。

import cv2import numpy as np

插入图片使用“ cv2.imread()”:

#Read Picturesimg = cv2.imread('jeruk.png')

然后将RGB转换为HSV并创建黄色(橙色为右黄色)颜色分割:

#Convert RGB to HSVhsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#Range of yellow color segmentation / classificationlower = np.array([20,100,100], dtype=np.uint8)upper = np.array([40,255,255], dtype=np.uint8)mask = cv2.inRange(hsv, lower, upper)kernel = np.ones((25,25),np.uint8)

进行对象像素的增厚,然后减小尺寸,以使对象像素彼此不靠近:

# Thicken object pixelsdilation = cv2.dilate(mask,kernel,iterations = 1)# Minimized the object pixels so they're not stick togethererosion = cv2.erode(img,kernel,iterations = 1)

找到橙色的轮廓和阵列:

#Find Contourscontours, hierarchy = cv2.findContours(dilation,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#Array Contourscontour = []

然后将原始图像复制到“ resultImg”变量:

#copy the original image to "resultImg"resultImg = (img).copy()

对轮廓进行迭代:

#Iterationfor i in range(len(contours)):        #amount contours to cnt variable        cnt = contours[i]        #Looking for radius to drau circle        (x,y),radius = cv2.minEnclosingCircle(cnt)        #circle center        center = (int(x),int(y))        if(int(radius) > 1):            contour.append(cnt)            #draw the circle            resultImg = cv2.circle(resultImg,center,int(radius,(255,0,0),3)

最后一个阶段,显示检测结果的轮廓:

#displays resultscv2.imshow('image',resultImg)cv2.waitKey(0)cv2.destroyAllWindows()

输出结果:

根据前面显示的橙色检测结果,可以通过轮廓检测橙色,该轮廓由橙色对象上存在蓝色圆圈标记。

— — 完 — —


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter