我从dir路径C:\ Automation \ OCR \ images运行我的脚本。我们正在阅读的PNG也在那条道路上。输出路径为:C:\ Automation \ OCR \ Drop。发生的事情是我的shell中出现错误,说WindowsError:[错误183]当该文件已存在时无法创建文件:'C:\ Automation \ OCR \ Drop'我希望能够将脚本隔离,读取来自特定文件夹的PNG文件,然后将预处理的PNG输出到不同的文件夹中。
下面的照片。
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)
答案 0 :(得分:0)
这一行
img = cv2.imwrite('enhancedThresholdTeleCapture.png',0)
应该是
cv2.imwrite('enhancedThresholdTeleCapture.png', img)
如果您遇到意外行为,请务必搜索OpenCV文档,以便了解调用函数的正确方法,以便获得预期的返回值。例如,docs for cv2.imwrite()
显示:
Python:
cv2.imwrite(filename, img[, params]) → retval
<强>参数:强>
- 文件名 - 文件名。
- 图片 - 要保存的图片。
- params - ...
随着功能的描述及其功能。语法
cv2.imwrite(filename, img[, params]) → retval
告诉我们调用该函数需要知道的一切。该函数有两个必需的参数,filename
和img
。显示的最后一个参数params
是可选(仅用于某些文件类型的特殊选项)。列表中的括号表示它是可选的。然后箭头→
显示返回值。如果函数没有返回值,则只是None
。在这种情况下,有一个返回值;将retval
命名为“返回值”,因此它不具有描述性。大多数未命名的返回值都不重要或用于调试目的;在使用文件系统执行某些操作的情况下,这样的返回值通常是一个布尔值,让您知道操作是否成功完成。
将来,您还可以在解释器中运行help(cv2.imwrite)
(或使用任何其他OpenCV函数),您应该能够获得上面显示的语法行,这样您至少可以看到该函数应该如何调用。