opencv 如何在Python中使用try - except语句捕获CV 2错误

y53ybaqx  于 2023-11-22  发布在  Python
关注(0)|答案(1)|浏览(172)

因此,我有几个png文件,它们按照以下模式保存
名称_编号1_区段_编号2
number 1和number 2这两个字段由整数占用,因此文件将被命名为
名称_1_部分_23
比如
现在,我想用cv 2加载它们,读出每个中黑色像素的份额。为此,我使用了两个嵌套循环。问题是,一些number 1-number 2的组合不存在。“name_4_section_27”可能不存在,而“name_1_section27”存在。如果这是一个常规的Python命令,这不会是一个问题,那么我只会使用“FileNotFoundError”以外的命令。
我试过了:

for i in range(n, k):
    for j in range(n, z):
        try: img = cv2.imread(fp + r"name_" + str(i) + "_section_" + str(j) + ".png")
        except (cv2.error, cv2.Error.StsAssert): print(fp + r"name_" + str(i) + "_section_" + str(j) + ".png does not exist")
        some Code
        [...]

字符串
然而,cv 2仍然抛出一个错误信息。except语句似乎不起作用。我使用了这里给出的错误代码,参见-215,但它对解决这个问题没有帮助。我尝试过cv、cv 2、opencv、opencv-python的大多数组合。error,但是我没有成功。我试着用except error作为e,但是没有用。除此之外,我试着用img = open来解决这个问题(文件,“B”)来捕获那里的FileNotFoundError,但这不能与cv2.imread一起使用(至少据我所知)。
因为有很多文件,我不想手动打开它们。有什么方法可以用try捕获CV 2错误-除了或者有其他的变通办法吗?
KR

ej83mcc0

ej83mcc01#

你可以只使用Exception类来捕获你想要捕获的错误。

except Exception: print(fp + r"name_" + str(i) + "_section_" + str(j) + ".png does not exist")

字符串

**Edit.:**如注解中所述,使用Exception并不是最佳解决方案。您链接的文档主要是C++文档。

在python中应该工作的是以下在您的代码中似乎是正确的:

except cv2.error as e: <handle a cv2 error>


然而,根据与此主题相关的旧帖子:#8873657
有些OpenCV函数不会抛出错误,它们会打印出一条消息并退出程序(我记不清是退出还是中止)。换句话说,有些错误是无法捕获的。
然而,正如在评论中提到的,你应该使用类似于

for f in glob.glob('*.png'):


来遍历文件,而不是猜测文件是否存在。或者你可以先使用OS库来检查文件是否存在:

if os.path.exists(file_path):
    #load image

相关问题