import cv2 import numpy as np def drawshape(src,points): i = 0 while i<len(points): if(i==len(points)-1): x, y = points[i][0] x1, y1 = points[0][0] cv2.line(src, (x, y), (x1, y1), (0, 0, 255 ), 3) else: x, y = points[i][0] x1, y1 = points[i + 1][0] cv2.line(src, (x, y), (x1, y1), (0, 0, 255), 3) i = i + 1 img=cv2.imread("C:/Users/CHL/Pictures/Screenshots/hand.png") print(img.shape) #装变为单通道 gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #二值化 ret,binary=cv2.threshold(gray,150,255,cv2.THRESH_BINARY) #轮廓查找 contours,hierarchy=cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img,contours,-1,(0,255,0),0) #多边形逼近,参数分别为轮廓、精度、是否闭合 e=20 approx=cv2.approxPolyDP(contours[0],e,True) drawshape(img,approx) print(approx) #凸包,参数分别为轮廓,绘制方向 #cv2.convexHull(approx) cv2.imshow('img',img) cv2.waitKey(0)
时间: 2024-04-09 09:27:21 浏览: 98
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
这段代码是使用OpenCV库绘制手的轮廓并进行多边形逼近和凸包操作。首先,通过使用cv2.imread函数读取手的图像,然后将其转换为灰度图像。接下来,使用二值化操作将图像转换为黑白图像。然后,使用cv2.findContours函数找到图像中的轮廓,并使用cv2.drawContours函数绘制轮廓。接着,使用cv2.approxPolyDP函数对轮廓进行多边形逼近,参数e表示逼近的精度,True表示封闭多边形。最后,使用cv2.imshow函数显示绘制了轮廓和逼近多边形的图像。
阅读全文