web-dev-qa-db-fra.com

TypeError: type d'argument incorrect pour l'opération intégrée

J'ai une erreur TypeError: type d'argument incorrect pour l'opération intégrée ..__J'ai écrit

import os
import cv2
from pathlib import Path
path = Path(__file__).parent
path /= "../../img_folder"
for f in path.iterdir():
    print(f)
    img=cv2.imread(f)

Dans img = cv2.imread (f), l'erreur se produit. Cette erreur est-elle une erreur de Python ou une erreur de répertoire? Dans print (f), je pense que de bons répertoires peuvent être obtenus.Comment dois-je résoudre ce problème?

4
user8817674

On dirait que path.iterdir() renvoie un objet de type <class 'pathlib.PosixPath'> et non pas str. Et cv2.imread() accepte un nom de fichier de chaîne.

Donc, cela corrige le problème:

import os
import cv2
from pathlib import Path
path = Path(__file__).parent
path /= "../../img_folder"
for f in path.iterdir():
    print(f)    # <--- type: <class 'pathlib.PosixPath'>
    f = str(f)  # <--- convert to string
    img=cv2.imread(f)
7
nitred

path n’est pas un objet de type STRING, c’est un objet pathLib Type, il faut donc que, sur la boucle, convertisse la valeur d’itérateur dans un objet String avec la méthode str () avant de la transmettre à imread.

Comme: 

<!-- language: py-->
for pathObj in path.iterdir():   
    pathStr = str(pathObj) 
    img=cv2.imread(pathStr)
0
Lucas Costa