如何使字符串成为原始字符串文字,以便我可以 运行 cv2.imread() ?

How do I make the string a raw string literal so that I can run cv2.imread() on it?

one = (r"C:\Users\Sam\OneDrive\Desktop\RateData")

for feature in features[0]:
    backslash = '\'
    imagePath = ((one)+backslash+"'"+str(feature)+"'")
    img = cv2.imread(imagePath)
    print(imagePath)
    print(img)

所以print(imagePath)的结果是: C:\Users\Sam\OneDrive\Desktop\RateData\'1.1.jpg'


print(img)的结果是:None


feature 只是图像文件名。我是这样写的,所以它会将唯一的图像文件名添加到路径中。

所以我通过 cv2.imread() 函数尝试 运行 并返回 None。 我知道它不会 运行 的原因是它只是将它作为字符串读取,而不将其识别为原始字符串文字。我不是一个非常有经验的程序员,所以我尝试了所有我能想到的方法(不是很多)让它以原始字符串文字的形式读取路径,但它没有用。因此,如果你们中的任何人可以帮助我将字符串变成那样,那就太棒了!

感谢您的帮助!

So the result of "print(imagePath) is: C:\Users\Sam\OneDrive\Desktop\RateData\'1.1.jpg

几乎可以肯定,您在 RateData 目录中没有名为 '1.1.jpg 的文件。虽然 Windows 确实允许文件名中包含 apostrophe/single-quote 个字符,但我无法想象您会故意在那里使用一个字符。所以,它可能被命名为 1.1.jpg?

我也不确定你是如何从代码中得到那个字符串的……但没关系。


你让这一切变得比它必须的要难得多。无需担心路径分隔符被正确转义和引用,或任何您尝试做的事情。

Python 附带 os.path 模块,用于执行与路径相关的操作。所以就用它吧:

for feature in features[0]:
    imagePath = os.path.join(one, str(feature))
    img = cv2.imread(imagePath)
    print(imagePath)
    print(img)

或者,因为我打赌 feature 已经是一个字符串,所以更简单:

    imagePath = os.path.join(one, feature)

或者,如果您更喜欢面向对象的 API,Python 也带有 pathlib:

one = pathlib.Path(one)
for feature in features[0]:
    imagePath = one / feature
    img = cv2.imread(str(imagePath))
    print(imagePath)
    print(img)

我不知道 cv2 是否支持路径库,但如果支持,您可以直接执行 cv2.imread(imagePath)。 (如果你想使用 pathlib,一定要试试看,因为它显然更具可读性。)