cv2.approxPolyDP() , cv2.arcLength() 这些是如何工作的
cv2.approxPolyDP() , cv2.arcLength() How these works
这些功能是如何工作的?我正在使用 Python3.7 和 OpenCv 4.2.0。提前致谢。
approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True)
如果您正在寻找示例片段,下面是一个:
import cv2
import imutils
# edged is the edge detected image
cnts = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]
# loop over the contours
for c in cnts:
# approximate the contour
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
# if our approximated contour has four points, then we
# can assume that we have found our screen
if len(approx) == 4:
screenCnt = approx
break
在上面的代码片段中,首先它从检测到边缘的图像中找到轮廓,然后对轮廓进行排序以找到五个最大的轮廓。最后它遍历轮廓并使用 cv2.approxPolyDP
函数来平滑和逼近四边形。 cv2.approxPolyDP
适用于文档边界等轮廓中有锐边的情况。
这些功能是如何工作的?我正在使用 Python3.7 和 OpenCv 4.2.0。提前致谢。
approx = cv2.approxPolyDP(cnt, 0.01*cv2.arcLength(cnt, True), True)
如果您正在寻找示例片段,下面是一个:
import cv2
import imutils
# edged is the edge detected image
cnts = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:5]
# loop over the contours
for c in cnts:
# approximate the contour
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True)
# if our approximated contour has four points, then we
# can assume that we have found our screen
if len(approx) == 4:
screenCnt = approx
break
在上面的代码片段中,首先它从检测到边缘的图像中找到轮廓,然后对轮廓进行排序以找到五个最大的轮廓。最后它遍历轮廓并使用 cv2.approxPolyDP
函数来平滑和逼近四边形。 cv2.approxPolyDP
适用于文档边界等轮廓中有锐边的情况。