【问题标题】:Rect Module Python矩形模块 Python
【发布时间】:2018-02-17 21:52:31
【问题描述】:

我最近在 python 中下载了一些尝试扫描收据(或准备扫描)的代码。我试图运行代码,但似乎有问题。 Python 无法识别模块“矩形”。我试图下载该模块,但没有可用的模块。我被困住了,想知道该怎么做。

注意:只有一行代码使用了该模块

代码:

import cv2
import numpy as np
import rect

# add image here.
image = cv2.imread('test_pic.jpg')

# resize image
# choose optimal dimensions
image = cv2.resize(image, (1500, 880))

# create copy of original image
orig = image.copy()

# convert to grayscale and blur to smooth
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# gaussian blur to smoothen texture
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
#blurred = cv2.medianBlur(gray, 5)

# apply Canny Edge Detection
edged = cv2.Canny(blurred, 0, 50)
orig_edged = edged.copy()

# find the contours in the edged image
# keep only the largest ones, and
# initialize screen contour
(contours, _) = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
contours = sorted(contours, key=cv2.contourArea, reverse=True)

#x,y,w,h = cv2.boundingRect(contours[0])
#cv2.rectangle(image,(x,y),(x+w,y+h),(0,0,255),0)

# get approximate contour
for c in contours:
    p = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02 * p, True)

    if len(approx) == 4:
        target = approx
        break


# map target points to 800x800 quadrilateral
approx = rect.rectify(target)
pts2 = np.float32([[0,0],[800,0],[800,800],[0,800]])

M = cv2.getPerspectiveTransform(approx,pts2)
dst = cv2.warpPerspective(orig,M,(800,800))

cv2.drawContours(image, [target], -1, (0, 255, 0), 2)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)


# use thresholding on warped image to get scanned effect (If Required)
ret,th1 = cv2.threshold(dst,127,255,cv2.THRESH_BINARY)
th2 = cv2.adaptiveThreshold(dst,255,cv2.ADAPTIVE_THRESH_MEAN_C,\
            cv2.THRESH_BINARY,11,2)
th3 = cv2.adaptiveThreshold(dst,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
            cv2.THRESH_BINARY,11,2)
ret2,th4 = cv2.threshold(dst,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

# show results
cv2.imshow("Original.jpg", orig)
cv2.imshow("Original Gray.jpg", gray)
cv2.imshow("Original Blurred.jpg", blurred)
cv2.imshow("Original Edged.jpg", orig_edged)
cv2.imshow("Outline.jpg", image)
cv2.imshow("Thresh Binary.jpg", th1)
cv2.imshow("Thresh mean.jpg", th2)
cv2.imshow("Thresh gauss.jpg", th3)
cv2.imshow("Otsu's.jpg", th4)
cv2.imshow("dst.jpg", dst)

# other thresholding methods
"""
ret,thresh1 = cv2.threshold(dst,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(dst,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(dst,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(dst,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(dst,127,255,cv2.THRESH_TOZERO_INV)

cv2.imshow("Thresh Binary", thresh1)
cv2.imshow("Thresh Binary_INV", thresh2)
cv2.imshow("Thresh Trunch", thresh3)
cv2.imshow("Thresh TOZERO", thresh4)
cv2.imshow("Thresh TOZERO_INV", thresh5)
"""

cv2.waitKey(0)
cv2.destroyAllWindows()

【问题讨论】:

    标签: python opencv computer-vision rect opencv-contour


    【解决方案1】:

    github repo 中,您可能从中获取了代码,还有另一个名为rect.py 的文件,其中有一个函数rectify() 在主程序中使用。在 Python 中,如果您创建其他 .py 模块,您可以将它们导入代码中以更好地封装某些函数,尽管在此代码中似乎确实没有必要将 rectify() 函数完全保存在不同的文件中。同样基本但更常见的是包含所有功能的.py 文件,然后是使用这些功能的主要.py 文件。

    编辑:需要明确的是,rect 模块位于存储库本身中。提个建议,除非您知道确定不需要其中的其他文件,否则通常克隆整个 repo。

    【讨论】:

    • 我很难遵循代码。 Dst 是我想用于 tesseract 的图像吗?
    • 还碰巧我克隆的存储库只包含两个文件而不是矩形文件。
    • 我明白了,我刚刚从代码中搜索了文本并找到了那个 repo。打开一个单独的问题可能会更好。不过,请查看 OpenCV 网站上的函数文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2013-09-18
    • 1970-01-01
    • 2013-03-31
    • 2011-01-03
    • 2017-03-18
    • 1970-01-01
    相关资源
    最近更新 更多