I'm working on a project that requires me to extract a face:
And I've done so, with dlib. The next step is to extract the keypoints from that region and store them. The problem, is that I can't extract that region.
I'm using OpenCV's sub rectangle function:
for k, d in enumerate(dets):
a = d.left()
b = d.top()
c = d.right()
d = d.bottom()
print ("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(k, a, b, c, d))
# showImg(img1, "Image")
temp1 = img1
cv2.rectangle(temp1, (a, b), (c, d), (255, 0, 0), 2)
# showImg(temp1, "Face")
aa = a
print ("Selection Size: " + str(aa))
# x1 = (a, b)
# x2 = (d, b)
# y1 = (a, d)
# y2 = (c, d)
# r, z = (x1+x2/2, y1+y2/2)
x = ((a+d)/2)
y = ((b+c)/2)
temp2 = cv2.getRectSubPix(img1, (aa,aa), (x,y))
showImg(temp2, "Face Image")
And despite reading multiple geometry and calculus tutorials, I can't get the math right. It keeps coming out too small, or off center. I finally dicerned that it needed to take the whole image into account, not just the frame:
But that's not accureate either, the bottom corner is the image, not the frame center.
And to make it even harder, I have to use cv2.getRectSubPix
. There's something wrong with my numpy and it won't process pictures correctly, and PIL/Pillow/PythonImageLybrary is giving me installation issures. It has to be all in OpenCV.
Can anyone help me with this issue?