这会有点长,我会给你一些基本的技术和指南以及一些高级建议,以提高 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"