调整在Python中使用Numpy和OpenCV绘制的多边形的大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调整在Python中使用Numpy和OpenCV绘制的多边形的大小相关的知识,希望对你有一定的参考价值。
我使用dlib和OpenCV作为一个形状(1, 13, 2)
的numpy数组读取面部地标的外唇多边形
现在,我不想绘制这个多边形,而是绘制这个多边形的缩放版本,比如增加2倍,然后绘制到黑色图像上。
我遇到了cv2.resize()
,但似乎接受了缩放图像。直接给cv.resize()
提供numpy数组点给出了这个错误:
OpenCV错误:cv :: hal :: resize中的断言失败(func!= 0)
那么,我的问题是,如何先缩放再绘制?我是否必须手动选择上半部并平移点并分别平移下半部,因为两者都需要在不同方向上平移。或者有什么方法可以直接使用cv2.resize
?
答案
def scale(image, coords):
'''
image: cv2 image
corods: e.g. [(ax, ay), (bx, by), (cx, cy), (dx, dy)]
'''
scale = 2
ow, oh, och = image.shape
scaled_img = cv2.resize(image,None,fx=scale,fy=scale)
w, h, ch = scaled_img.shape
M = cv2.getAffineTransform(np.float32([[ow, 0], [ow, oh], [0, oh]]), np.float32([[w, 0], [w, h], [0, h]]))
newpointlist = []
npcoords = np.array([coords], np.int32)
scaledpoints = cv2.transform(npcoords,M)
for p in scaledpoints[0]:
newpointlist.append(p)
#debugging pics
for point in newpointlist:
cv2.circle(scaled_img, (int(point[0]), int(point[1])), 5, (0,0,255), -1)
cv2.imshow('img', scaled_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
像这样的东西可以工作。我用它来缩放图像和图像中的某些点。
以上是关于调整在Python中使用Numpy和OpenCV绘制的多边形的大小的主要内容,如果未能解决你的问题,请参考以下文章
opencv python 已经安装numpy 依然报错No module named 'numpy'和 No module named 'cv2'
RGB 图像中最主要的颜色 - OpenCV / NumPy / Python