【问题标题】:How to handle an error in CV2(Cv2.imwrite)?如何处理 CV2(Cv2.imwrite) 中的错误?
【发布时间】:2020-12-13 07:48:54
【问题描述】:

我正在尝试处理 cv2.imwrite 不断抛出的错误,它不断到达文件夹中完全相同的图像,然后在 cv2.imwrite 行说“-215:断言失败”,我没有对于这种类型的错误,很幸运写作失败保险柜,它读取正确,所以我不知道为什么它不会写。 这两种方法我都试过了:

        writeStatus = cv2.imwrite('output/'+ i, cropped)
        if writeStatus is True:
            print('Image Written')
        else:
            print('Error saving photo')
            cv2.imwrite('rejected/'+ i, image)
        if cv2.imwrite('output/'+ i, cropped) == True:
            print('Image write succeeded')
        else:
            if cv2.imwrite('rejected/'+ i, image)== True:
                print ('Cropped image could not be written, sent to rejects')
            else:
                print('writing error, script stopped')
                break

我不知道为什么它不会保存图像,到目前为止它似乎只讨厌这个特定的,即使图像单独在一个文件夹中它也不会写它,老实说我不在乎只要我能输出图像就像拒绝文件夹一样,而不是杀死整个脚本。 编辑我尝试使用

        writeStatus = cv2.imwrite('output/'+ i, cropped)
        if writeStatus is True:
            print('Image Written')
        else:
            print('Error saving photo')
            continue

错误仍然停止了脚本

【问题讨论】:

  • 您正在尝试保存空图像。检查为什么“裁剪”为空
  • 我不知道为什么它是空的,它可以很好地处理图像,直到它到达 imwrite 命令。据我所知,没有什么应该返回 None 值。
  • @Miki 我添加了一个检查以确保裁剪值不是 None 或 0 并且它们很好,直接通过了检查然后抛出了同样的错误

标签: python python-3.x opencv error-handling opencv-python


【解决方案1】:

建议#1


如果我们看一下语句:

writeStatus = cv2.imwrite('output/'+ i, cropped)

'output/' + i 应该是图片名称,裁剪后应该是图片。

据我了解,您想保存ith 值,但正确的方法是:

from os.path import join

filename = join('output', str(i) + '.png') # you can use other extensions like .jpg
cv2.imwrite(filename, cropped)

但是,如果cropped 变量是图像,则为真。

建议 #2


如果单个图像导致问题并且您不在乎,则可以使用 try-except 块和 continue 关键字

try:
    writeStatus = cv2.imwrite(...)
    .
    .
except:
    continue

【讨论】:

  • 为什么这只会在一张图片上导致错误?所有其他图像工作正常。 output/ 是文件路径,我将原始文件名存储在变量 i 中。
  • 仅适用于单个图像?那么你可以使用continue关键字跳过图片。
  • 尝试在 writeStatus 中使用 continue 关键字,这样如果 writeStatus 为 false 就会触发 continue,不走运,错误仍然会停止脚本。
  • 我已经更新了我的答案,请看Suggestion#2部分
  • 好吧,这行得通,我添加了将问题图像输出到单独文件夹的功能,它就像一个魅力。不知道为什么 true false 语句不起作用,据我所知, cv2.imwrite 应该输出 true 或 false,因为如果打印图像写入函数为 true,则它可以工作。这对我来说是个谜。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2017-11-17
  • 2021-05-29
  • 2018-11-13
  • 2020-02-27
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
相关资源
最近更新 更多