在上篇文章我们找到虫子的最小面积的矩形了,画的矩形框也很漂亮,但是如果我们想找到很正的矩形框该怎么做呢?
这篇文章的思路是利用cv2.findContours函数先找出目标的轮廓,然后再找到这些轮廓的最值xmin,ymin,xmax,ymax,有了这四个值就可以画出虫子很正的矩形框了,另外此篇代码仅适用只有一个目标的图片。
首先,我们读入之前的二值图片,如果不是一个通道的图,需将其转化成一个通道:
import cv2
import numpy as np
img = cv2.imread('closed.jpg',1)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
找出目标轮廓:
image,contours,hierarchy = cv2.findContours(gray.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_TC89_KCOS)
我们可以看看轮廓的样子是怎样的
for i in range(np.size(contours)):
draw_cnts = cv2.drawContours(img.copy(),contours[i],-1,(0,255,0),5)
cv2.imshow('draw_cnts',draw_cnts)
效果如下:

找出轮廓的四个最值
pointxs = []
pointys = []
for i in range(np.size(contours)):
pointxs.append(contours[i][0][0][0])
pointys.append(contours[i][0][0][0])
pointxs.sort()
pointys.sort()
#print(pointxs[0],pointxs[-1],pointys[0],pointys[-1])
xmin = pointxs[-1]
xmax = pointxs[0]
ymin = pointys[-1]
ymax = pointys[0]
接下来就是画出我们很正的矩形框了
rect = cv2.rectangle(img.copy(),(xmin,ymin),(xmax,ymax),(255,0,0),5)
cv2.imshow('rect',rect)
效果如下:

网友评论