1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【opencv-python】寻找矩形框

【opencv-python】寻找矩形框

时间:2020-05-27 21:24:31

相关推荐

【opencv-python】寻找矩形框

实现思路:

将图片转换成HSV颜色空间,筛选出蓝色,得到二值图(见图1)根据轮廓绘制小矩形(见图2)选择合适的小矩形绘制最终的矩形框(见图3)

代码:

importcv2importnumpyasnpimage_path=r"E:\blue.jpg"#图片路径img=cv2.imread(image_path)#转化成HSV颜色空间hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)#筛选蓝色,得到二值图mask=cv2.inRange(hsv,(100,43,46),(124,255,255))#绘制框的图像imgResult=cv2.copyTo(img,mask)img_be=cv2.copyTo(img,mask)#设置核kernel=np.ones((6,6),np.uint8)#开运算#op=cv2.MORPH_OPEN进行开运算,指的是先进行腐蚀操作,再进行膨胀操作#op=cv2.MORPH_CLOSE进行闭运算,指的是先进行膨胀操作,再进行腐蚀操作#开运算:表示的是先进行腐蚀,再进行膨胀操作#闭运算:表示先进行膨胀操作,再进行腐蚀操作opening=cv2.morphologyEx(mask,cv2.MORPH_OPEN,kernel)#寻找轮廓contours,hierarchy=cv2.findContours(opening,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)#矩形列表box_ji=[]#根据轮廓绘制矩形foriinrange(len(contours)):area=cv2.contourArea(contours[i])x,y,w,h=cv2.boundingRect(contours[i])cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)rect=cv2.minAreaRect(contours[i])#提取矩形坐标box=cv2.boxPoints(rect)box=np.int0(box)angle=abs(abs(rect[2])-45)length=max(rect[1])width=min(rect[1])cv2.drawContours(img,[box],0,(0,255,0),2)box_ji.append(box)#收集长度,根据长度进行匹配合适连接在一起的两个矩形length_ji=[]forbinbox_ji:length_ji.append(b[2][1]-b[1][1])#如果长度差在0.3之间,则匹配成功ans_ji=[]forlinrange(len(length_ji)-1):forjinrange(l+1,len(length_ji)):if-0.3<=length_ji[l]-length_ji[j]<=0.3:ans_ji.append((l,j))#选择作为框的4个点,选择的顺序和矩形的边的位置和矩形的x,y坐标有关,为的是框选出最大的区域kuan=[]forainans_ji:ifbox_ji[a[0]][0][0]<box_ji[a[1]][2][0]:kuan.append([list(box_ji[a[0]][0]),list(box_ji[a[0]][3]),list(box_ji[a[1]][2]),list(box_ji[a[1]][1])])else:kuan.append([list(box_ji[a[0]][1]),list(box_ji[a[0]][2]),list(box_ji[a[1]][3]),list(box_ji[a[1]][0])])#绘制矩形forkinkuan:kuang_=cv2.rectangle(imgResult,k[1],k[3],(0,0,255),thickness=1,lineType=4)cv2.imshow("begin",img_be)cv2.imshow("Mask",mask)cv2.imshow("kuang",img)cv2.imshow("final",kuang_)cv2.waitKey(0)cv2.destroyAllWindows()

结果:

图表 1

图表 2

图表 3

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。