九宫格人车识别

一、原理

通过霍夫检测圆的个数来识别小人位置。
在这里插入图片描述

二、过程

1.二值图像

在这里插入图片描述

2.去掉宫格内容,便于分割

在这里插入图片描述

3.对二值图填补,减少纹理

在这里插入图片描述

4.分割九宫格,依次检测每个宫格中圆个数

在这里插入图片描述
在这里插入图片描述

5.最终显示小人所在宫格图片,在img6.jpg中

在这里插入图片描述
详细程序运行结果在这里插入图片描述

三、代码

image = cv2.imread('mancar.jpg',0)
ret,bw = cv2.threshold(image,180,255,cv2.THRESH_BINARY)
cv2.imshow("bin",bw)
#闭运算,去掉九宫格内的内容,便于检测每个宫格轮廓
kernel = np.ones((10,10),np.uint8)
bw2 = cv2.morphologyEx(bw, cv2.MORPH_CLOSE, kernel)
cv2.imshow("bw2",bw2)
#开运算减少纹理
kerne2 = np.ones((4,4),np.uint8)
bw = cv2.morphologyEx(bw, cv2.MORPH_OPEN, kerne2)
cv2.imshow("bw3",bw)
pictue_size=bw2.shape
picture_height=pictue_size[0]
picture_width=pictue_size[1]
#边界提取
contours, hierarchy = cv2.findContours(bw2,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
#九宫格分割
img=[0 for i in range(len(contours))]
print("宫格区域数量",len(contours))
for j in range(0,len(contours)):  
    x, y, w, h = cv2.boundingRect(contours[j])
    img[j]=bw[y:y+h,x:x+w]
    cv2.imwrite('img%s.jpg'%str(j),img[j])
countor=[]
for i in range(0,len(contours)):
    circles= cv2.HoughCircles(img[i],cv2.HOUGH_GRADIENT,1,20,param1=100,param2=14,minRadius=17,maxRadius=150)
    #输出检测到圆的个数
    print('宫格检测圆边个数',len(circles[0]))
    countor.append(len(circles[0]))
    #根据检测到圆的信息,画出每一个圆
    for circle in circles[0]:
        if (circle[2] >= 100):
            continue
        #坐标行列
        x=int(circle[0])
        y=int(circle[1])
        #半径
        r=int(circle[2])
        #在原图用指定颜色标记出圆的位置
        img[i]=cv2.circle(img[i],(x,y),r,(0,255,0),1)
    #显示新图像
    cv2.imshow('circledetect',img[i])
    cv2.waitKey(0)
min=0
for k in range(len(contours)):
    if countor[min]>countor[k]:
        min=k
print("小人在宫格img%s中"%min)
man=cv2.imread('img6.jpg')
cv2.imshow('man',man)
cv2.waitKey(0)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值