在没有任何外部库的情况下获取图像的一部分,然后是该正方形的中心?
Get a section of an image, and then the center of that square, without any external libraries?
我正在做一个需要我提取人脸的项目:
我已经用 dlib 做到了。下一步是从该区域提取关键点并存储它们。问题是我无法提取该区域。
我正在使用 OpenCV 的子矩形函数:
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")
尽管阅读了多本几何和微积分教程,但我还是无法正确理解数学。它总是显得太小,或偏离中心。我终于断定它需要考虑整个图像,而不仅仅是框架:
但这也不准确,底角是图像,而不是框架中心。
为了让它变得更难,我必须使用cv2.getRectSubPix
。我的 numpy 有问题,无法正确处理图片,PIL/Pillow/PythonImageLybrary 给我安装问题。它必须全部在 OpenCV 中。
谁能帮我解决这个问题?
如果你不能使用 numpy 切片,你应该修复你的代码:
这是您的主要错误:
x = ((a+d)/2)
y = ((b+c)/2)
等于:
x = ((left+bottom)/2)
y = ((top+right)/2)
还有一个错误是重新声明变量 'd',最初 'detection rect' 变成 'bottom'
因此解决方案可能如下所示:
c = d.center();
center = (c.x, c.y)
patch_size = (d.width(), d.height())
cv2.rectangle(temp1, patch_size, center, (255, 0, 0), 2)
我正在做一个需要我提取人脸的项目:
我已经用 dlib 做到了。下一步是从该区域提取关键点并存储它们。问题是我无法提取该区域。
我正在使用 OpenCV 的子矩形函数:
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")
尽管阅读了多本几何和微积分教程,但我还是无法正确理解数学。它总是显得太小,或偏离中心。我终于断定它需要考虑整个图像,而不仅仅是框架:
但这也不准确,底角是图像,而不是框架中心。
为了让它变得更难,我必须使用cv2.getRectSubPix
。我的 numpy 有问题,无法正确处理图片,PIL/Pillow/PythonImageLybrary 给我安装问题。它必须全部在 OpenCV 中。
谁能帮我解决这个问题?
如果你不能使用 numpy 切片,你应该修复你的代码:
这是您的主要错误:
x = ((a+d)/2)
y = ((b+c)/2)
等于:
x = ((left+bottom)/2)
y = ((top+right)/2)
还有一个错误是重新声明变量 'd',最初 'detection rect' 变成 'bottom'
因此解决方案可能如下所示:
c = d.center();
center = (c.x, c.y)
patch_size = (d.width(), d.height())
cv2.rectangle(temp1, patch_size, center, (255, 0, 0), 2)