Python (WindowsError 183)cv2.imread/write如何在运行脚本的不同位置执行这些功能

Python (WindowsError 183)cv2.imread/write如何在运行脚本的不同位置执行这些功能,python,python-2.7,opencv,image-processing,python-imaging-library,Python,Python 2.7,Opencv,Image Processing,Python Imaging Library,我正在从目录路径C:\Automation\OCR\images运行脚本。我们正在阅读的PNG也在这条路径上。输出路径为:C:\Automation\OCR\Drop。发生的情况是,我的shell中出现一个错误,说WindowsError:[error 183]无法创建文件,而该文件已经存在:“C:\Automation\OCR\Drop”我希望能够隔离脚本,从特定文件夹读取PNG文件,然后将预处理的PNG输出到其他文件夹中 下图 导入cv2 将numpy作为np导入 输入数学 导入操作系统

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

下图

导入cv2
将numpy作为np导入
输入数学
导入操作系统
从matplotlib导入pyplot作为plt
从cycler导入cycler
从PIL导入图像,图像增强
#阅读PNG
dirname='C:\Automation\OCR\Drop'
os.mkdir(dirname)
img=cv2.imread('teleCapture.png',0)
def双边自适应阈值(img,ksize=20,C=0,mode='floor',真值=255,假值=0):
掩码=np.full(img.shape,假值,dtype=np.uint8)
kernel\u l=np.array([[1]*(ksize)+[-ksize]],dtype=np.int16)
kernel\u 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)
如果模式==“地板”:
delta=C*ksize
elif模式=='ceil':
delta=-C*ksize
else:raise ValueError(“意外的模式值。预期值为'floor'或'ceil'))
left_thresh=cv2.filter2D(img,cv2.CV_16S,kernel_l,anchor=(ksize,0),delta=delta,borderType=cv2.BORDER_常量)
右阈值=cv2.filter2D(img,cv2.CV\u 16S,kernel\u r,anchor=(0,0),delta=delta,borderType=cv2.BORDER\u常量)
up\u thresh=cv2.filter2D(img,cv2.CV\u 16S,kernel\u,anchor=(0,ksize),delta=delta,borderType=cv2.BORDER\u常量)
down_thresh=cv2.filter2D(img,cv2.CV_16S,kernel_d,anchor=(0,0),delta=delta,borderType=cv2.BORDER_常量)
如果模式==“地板”:
遮罩[((0>左_阈值)和(0>右_阈值))|((0>上_阈值)和(0>下_阈值))]=真实值
elif模式=='ceil':
遮罩[((0<左_阈值)和(0<右_阈值))|((0<上_阈值)和(0<下_阈值))]=真实值
返回掩码
#将修改后的PNG写入路径
os.chdir(dirname)
cv2.imwrite('enhancedThresholdTeleCapture.png',img)
这一行

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

cv2.imwrite('enhancedThresholdTeleCapture.png', img)
如果出现意外行为,请确保搜索OpenCV文档,以便知道调用函数的正确方法,并获得预期的返回值。例如,该节目:

Python:
cv2.imwrite(文件名,img[,参数])→ retval

参数:

  • 文件名–文件名
  • 图像–要保存的图像
  • 参数
以及对函数及其功能的描述。语法

cv2.imwrite(filename, img[, params]) → retval
告诉我们调用函数所需的所有信息。该函数有两个必需参数,
filename
img
。显示的最后一个参数,
params
,是可选的(仅用于某些文件类型的特殊选项)。列表中的括号表示它是可选的。然后箭头
显示返回值。如果函数没有返回值,那么它就是
None
。在这种情况下,有一个返回值;为“返回值”命名为
retval
,因此它不具有很强的描述性。大多数未命名的返回值不重要或用于调试目的;在使用文件系统执行某些操作的情况下,这种返回值通常为布尔值,让您知道操作是否成功完成


将来,您还可以在解释器中运行
帮助(cv2.imwrite)
(或使用任何其他OpenCV函数),并且您应该能够获得上面显示的语法行,这样您至少可以看到函数应该如何调用。

您能重新回答您的问题吗?我不明白你在问什么我不知道你想要什么,但是如果你不提供带有输入图像的函数,这行如何保存图像?该函数也不会返回图像,因此我猜您在使用这些函数之前从未阅读过OpenCV文档…@Milk我对这篇文章进行了大量编辑。@Pigger我对文章进行了澄清编辑,而不是通过
os
创建和切换目录,为什么不……指定位置的完整路径?这不是脚本类型
os.chdir
真正的目的是…字面上就是做
cv2.imwrite(目录+'filename.png',img)
。另外,这是一个与您最初发布的完全不同的问题。你不应该那样做;您应该已经接受了对原始问题的回答并打开了一个新问题。我正在使用img=cv2.imread('C:\Automation\OCR\images\teleCapture.png',0)来读取png文件。。。在预处理这个图像后,我将把这个修改过的文件写入一个特定的目录。(python脚本、读取文件和写入文件是3个不同的位置)下面是我编写的内容。cv2.imwrite('C:\Automation\OCR\hey\enhancedThresholdTeleCapture.png',img)当我将文件写入此位置时,输出的png文件不可读。我将附上照片,显示当输出是脚本所在位置与不同位置时发生的情况@亚历山大雷诺兹
cv2.imwrite(filename, img[, params]) → retval