【问题标题】:Python OpenCV Invalid Literal ErrorPython OpenCV 无效文字错误
【发布时间】:2023-03-31 21:13:01
【问题描述】:

我有ValueError: invalid literal for int() with base 10: '.DS' 错误。我正在寻找一天的解决方案,但我无法解决它。我的目录不是空的。我正在尝试使用 OpenCV 训练人脸识别器。我正在尝试从我的train 目录中获取人脸照片,但我不能。

我的代码:

images = []
labels = []
for file in os.listdir('train/'):
    image = cv2.imread('train/'+file, 0)
    images.append(image)
    labels.append(int(file.split('_')[0]))

火车上的照片被命名为1_001.pmg、1_002.pmg等等。我正在为我的愚蠢问题寻求您的帮助。谢谢!

ps。此代码来自@Fabian 的答案how to notify user if there are common faces detected between two directories with python and opencv

【问题讨论】:

  • 您收到的堆栈跟踪中究竟有什么不清楚的地方?对我来说这听起来很明显,.DS 无法转换为 int。您的代码中只有一个地方可以进行转换,即for 循环的最后一行。请注意,以点开头的文件名在大多数*nix 系统中被归类为隐藏 文件。
  • 感谢您的回复,我需要它作为整数,因为 faceRecognition.train 函数需要它。所以我必须将其转换为整数

标签: python opencv


【解决方案1】:

问题在于os.listdir('train/'),因为它返回给定目录中可能对您隐藏的所有文件的列表,并且'.DS_Store'也在这些文件中,您需要检查返回的字符串是否以.png 结尾,然后将它们传递给cv::imread

images = []
labels = []
for file_name in os.listdir('train/'):
    if file_name.endswith(".png"):
        image = cv2.imread('train/'+file_name, 0)
        images.append(image)
        labels.append(int(file_name.split('_')[0]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多