这个Python语法是什么? rect [:,2:] + = rects [:,2]

时间:2016-11-08 14:01:36

标签: python

在BlackHatPython中,第4章有这个功能:

def face_detect(path,file_name):
  img = cv2.imread(path)
  cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")
  rects = cascade.detectMultiScale(img, 1.3, 4, cv2.cv.CV_HAAR_SCALE_IMAGE, (20,20))
  if len(rects) == 0:
    return False
  rects[:, 2:] += rects[:, :2]
  # highlight the faces in the image
  for x1,y1,x2,y2 in rects:
    cv2.rectangle(img,(x1,y1),(x2,y2),(127,255,0),2)
  cv2.imwrite("%s/%s-%s" % (faces_directory,pcap_file,file_name),img)
  return True

的含义是什么?
rect[:, 2:] += rects[:, :2]  

2 个答案:

答案 0 :(得分:4)

这是在python中切片数组,例如在此解释:Explain Python's slice notation

在特定情况下,您有一个numpy数组,这是一个2D结构,因此有两个维度可以切片。各个切片用逗号分隔。请查看此代码以获取可视化:

In [7]: np.diag([3,4,5])
Out[7]: 
array([[3, 0, 0],
       [0, 4, 0],
       [0, 0, 5]])

In [8]: np.diag([3,4,5])[:2]
Out[8]: 
array([[3, 0, 0],
       [0, 4, 0]])

In [9]: np.diag([3,4,5])[:2, :]
Out[9]: 
array([[3, 0, 0],
       [0, 4, 0]])

In [10]: np.diag([3,4,5])[:2, :1]
Out[10]: 
array([[3],
       [0]])

答案 1 :(得分:0)

要剖析您的表达方式,请参阅Python Language Reference。子表达式:2:是切片,然后表达式:, 2:是由逗号运算符连接的两个切片(创建两个切片的元组)。然后,它用于订阅rectrects,结果将会应用于+=运算符。