在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]
答案 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:
是由逗号运算符连接的两个切片(创建两个切片的元组)。然后,它用于订阅rect
和rects
,结果将会应用于+=
运算符。