杂货账单:
由于图像的一些顶部和底部缺少最大轮廓,即无法裁剪主票据。对于完整的票据图像,该代码运行良好,但无法处理缺少的顶点图像
代码:
imgContours = img.copy() # COPY ORIGNAL IMAGE
imgBigContour = img.copy() # COPY ORIGNAL IMAGE
_, contours,_ = cv2.findContours(imgThreshold, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # FIND ALL CONTOURS
cv2.drawContours(imgContours, contours, -1, (0, 255, 0), 10) # DRAW ALL DETECTED CONTOURS
# FIND THE BIGGEST COUNTOUR
biggest, maxArea = utlis.biggestContour(contours) # FIND THE BIGGEST CONTOUR
if biggest.size != 0:
biggest=utlis.reorder(biggest)
cv2.drawContours(imgBigContour, biggest, -1, (0, 255, 0), 20) # DRAW THE BIGGEST CONTOUR
imgBigContour = utlis.drawRectangle(imgBigContour,biggest,2)
pts1 = np.float32(biggest) # PREPARE POINTS FOR WARP
pts2 = np.float32([[0, 0],[widthImg, 0], [0, heightImg],[widthImg, heightImg]]) # PREPARE POINTS FOR WARP
matrix = cv2.getPerspectiveTransform(pts1, pts2)
imgWarpColored = cv2.warpPerspective(img, matrix, (widthImg, heightImg))
正如其中一个人在评论中所建议的,即使用
cv2.copyMakeBorder()
,它起了作用。因此,与上述参考代码相关的正确语法为:实际上,它的作用是在每一侧添加一个10像素的黑色边框。而且,当我们使用
cv2.findContour()
时,它实际上检测到了之前没有计数的最大的一个(包括以前的小的)相关问题 更多 >
编程相关推荐