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

时间:2018-07-12 23:33:32

标签: python string opencv literals cv2

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

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.1.jpg'


print(img)的结果是:None


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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

因此,“ print(imagePath)”的结果是:C:\ Users \ Sam \ OneDrive \ Desktop \ RateData \ 1 \'1.1.jpg

几乎可以肯定,'1.1.jpg目录中没有名为RateData的文件。尽管Windows确实在文件名中允许使用单引号/单引号字符,但我无法想象您会故意在其中使用一个。因此,它可能命名为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是否支持pathlib,但如果知道,您可以执行cv2.imread(imagePath)。 (如果您想使用pathlib,请一定尝试一下,因为它显然更具可读性。)