2017-12-28 3 views
1

Ich habe einen FehlerTypeerror: nicht unterstützte Operandtyp (e) für +: 'PosixPath' und 'str'

TypeError: unsupported operand type(s) for +: 'PosixPath' and 'str' 

Mein Code ist der folgende

import os 
import cv2 
import random 
from pathlib import Path 

path = Path(__file__).parent 
path = "../img_folder" 

for f in path.iterdir(): 

    print(f) 
    f = str(f) 
    img=cv2.imread(f) 
    line = random.randint(0, 50) 
    img[3, 3, :] = line 
    cv2.imwrite(path + "/" + "photo.png", img) 

Traceback sagt einen Code von cv2.imwrite~ ist falsch. Ich kann wirklich nicht verstehen, warum das falsch ist. Ist diese Art von Pfadfehler? Oder bin ich falsch, diese Methode zu verwenden? Wie soll ich das beheben?

+2

Bist Du sicher Sie den richtigen Code geschrieben? 'path' ist eindeutig eine Zeichenkette am Anfang der for-Schleife, aber Sie rufen' iterdir' darauf auf, wobei AFAIK keine Methode für 'str' in Python 2 oder 3 ist. –

+0

Angenommen, der' path = " ../ img_folder "' existiert nicht (wie von @ SilvioMayolo bemerkt), glaube ich, dass 'pathlib.Path' ein' PosixPath' Objekt (keine Zeichenkette) zurückgibt. Ich glaube nicht, dass Sie diese zwei verschiedenen Objekte direkt hinzufügen können. –

Antwort

0

Wenn Sie Ihren Typfehler durchsehen, liegt es tatsächlich daran, dass Sie versuchen, den Operator + auf einem PosixPath-Typ und einem str zu verwenden. Sie müssen die PosixPath in eine Zeichenfolge konvertieren, bevor Sie die imwrite verwenden können.

Vielleicht versuchen:

cv2.imwrite(str(path) + "/" + "photo.png", img) 

Alternativ die richtige Verkettung verwenden, wie in den pathlib docs beschrieben.

0

Sie können nicht mit operan + in PosixPath, aber unter Verwendung von /

# before 
    cv2.imwrite(path + "/" + "photo.png", img) 
    # after 
    cv2.imwrite(path/"photo.png", img) 
Verwandte Themen