这将是一个有点长,我想给你一些基本的技巧和指导具有一定的先进性建议沿增加QNF包检测的准确性。
假设您已将红色标记的轮廓存储在变量contours
中。
首先定义要过滤的轮廓区域的上限和下限。对于每个给出的图像,中部地区的区域范围内出来是:
CHIP_CENTER_AREA_LOWER, CHIP_CENTER_AREA_UPPER = 20*1000, 25*1000
所以我们遍历所有的轮廓和过滤器具有在上述范围内区域的轮廓,这将消除较小的轮廓,和我们只会检查较大的轮廓。
probable_chip_center_contour_idx = []
for i in xrange(len(contours)):
cnt = contours[i]
area = cv2.contourArea(cnt)
if CHIP_CENTER_AREA_LOWER < area < CHIP_CENTER_AREA_UPPER:
probable_chip_center_contour_idx.append(i)
现在对面积的基础上筛选出可能的轮廓后,我们会检查周边轮廓(销)的数量。那些预期在给定半径内的相邻轮廓的数目的中心轮廓将不是最终结果。
radius = 80
EXPECTED_NEIGHBOURING_PINS = 28
for i in probable_chip_center_contour_idx:
cnt = contours[i]
cnt_bounding_rect = cv2.boundingRect(cnt)
extended_cnt_bounding_rect = [cnt_bounding_rect[0] - radius, cnt_bounding_rect[1] - radius,
cnt_bounding_rect[2] + 2*radius, cnt_bounding_rect[3] + 2*radius]
neighbouring_contours = 0
for probable_neighbouring_contour in contours:
probable_bounding_rect = cv2.boundingRect(probable_neighbouring_contour)
if is_rect_inside(probable_bounding_rect, extended_cnt_bounding_rect):
neighbouring_contours += 1
if neighbouring_contours > EXPECTED_NEIGHBOURING_PINS:
print "QFN Found"