代码之家  ›  专栏  ›  技术社区  ›  lizardwizard

(WindowsError 183)cv2。i读/写如何使这些函数在运行脚本的不同位置发挥作用

  •  -2
  • lizardwizard  · 技术社区  · 8 年前

    我正在从目录路径C:\Automation\OCR\images运行脚本。我们正在阅读的PNG也是这样。输出路径为:C:\Automation\OCR\Drop。发生的情况是,我的shell中出现了一个错误,即WindowsError:[error 183]无法在文件已经存在的情况下创建文件:“C:\Automation\OCR\Drop”我希望能够隔离脚本,从特定文件夹读取PNG文件,然后将预处理的PNG输出到其他文件夹中。

    http://imgur.com/a/AbWUA

    import cv2
    import numpy as np
    import math
    import os
    from matplotlib import pyplot as plt
    from cycler import cycler
    from PIL import Image, ImageEnhance
    
    # Read PNG
    dirname = 'C:\Automation\OCR\Drop'
    os.mkdir(dirname)
    img = cv2.imread('teleCapture.png', 0)
    
    def bilateral_adaptive_threshold(img, ksize=20, C=0, mode='floor', true_value=255, false_value=0):
    mask = np.full(img.shape, false_value, dtype=np.uint8)
    
    kernel_l = np.array([[1] * (ksize) + [-ksize]], dtype=np.int16)
    kernel_r = np.array([[-ksize] + [1] * (ksize)], dtype=np.int16)
    kernel_u = np.array([[1]] * (ksize) + [[-ksize]], dtype=np.int16)
    kernel_d = np.array([[-ksize]] + [[1]] * (ksize), dtype=np.int16)
    
    if mode == 'floor':
        delta = C * ksize
    elif mode == 'ceil':
        delta = -C * ksize
    else: raise ValueError("Unexpected mode value. Expected value is 'floor' or 'ceil'.")
    
    left_thresh = cv2.filter2D(img, cv2.CV_16S, kernel_l, anchor=(ksize,0), delta=delta, borderType=cv2.BORDER_CONSTANT)
    right_thresh = cv2.filter2D(img, cv2.CV_16S, kernel_r, anchor=(0,0), delta=delta, borderType=cv2.BORDER_CONSTANT)
    up_thresh = cv2.filter2D(img, cv2.CV_16S, kernel_u, anchor=(0,ksize), delta=delta, borderType=cv2.BORDER_CONSTANT)
    down_thresh = cv2.filter2D(img, cv2.CV_16S, kernel_d, anchor=(0,0), delta=delta, borderType=cv2.BORDER_CONSTANT)
    
    if mode == 'floor':
        mask[((0 > left_thresh) & (0 > right_thresh)) | ((0 > up_thresh) & (0 > down_thresh))] = true_value
    elif mode == 'ceil':
        mask[((0 < left_thresh) & (0 < right_thresh)) | ((0 < up_thresh) & (0 < down_thresh))] = true_value
    return mask
    
    # Write modified PNG to the path
    os.chdir(dirname)
    cv2.imwrite('enhancedThresholdTeleCapture.png', img)
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   alkasm Anuj Gautam    8 年前

    这条线

    img = cv2.imwrite('enhancedThresholdTeleCapture.png',0)
    

    应该改为

    cv2.imwrite('enhancedThresholdTeleCapture.png', img)
    

    docs for cv2.imwrite() 显示:

    cv2.imwrite(filename, img[, params]) → retval

    参数:

    • 文件名
    • 形象 要保存的图像。
    • 参数

    cv2.imwrite(filename, img[, params]) → retval
    

    告诉我们调用函数需要知道的一切。该函数有两个 必修的 论据, filename img params (并且仅用于某些文件类型的特殊选项)。列表中的括号表示它是可选的。然后是箭头 → 显示返回值。如果函数没有返回值,那么它只是 None retval

    将来,你也可以跑步 help(cv2.imwrite) (或使用任何其他OpenCV函数)在解释器中,您应该能够获得上面所示的语法行,这样您至少可以看到应该如何调用该函数。