2017-12-28 18 views
1

私は私のコードは次のようはTypeError:+のためのサポートされていないオペランドのタイプ(S): 'PosixPath' と 'str' は

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) 

トレースバックがcv2.imwrite~のコードを言うでエラー

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

を得ました間違っている。なぜこれが間違っているのか分かりません。このタイプのパスエラーですか?あるいは、私はこの方法を使うのが間違っていますか?私はこれをどのように修正すべきですか?

+2

を使用することはできませんが、あなたが正しいコードを掲載よろしいですか? 'path'はforループの最初の文字列ですが、' iterdir'を呼び出します。AFAIKはPython2または3の 'str'のメソッドではありません。 –

+0

' path = " ../ img_folder "は存在しません(@SilvioMayoloのように)、' pathlib.Path'は 'PosixPath'オブジェクト(文字列ではありません)を返します。私はあなたがこれら2つの異なるオブジェクトを直接追加できるとは思わない。 –

答えて

0

タイプエラーを確認すると、実際にはPosixPathタイプとstr+演算子を使用しようとしているためです。 imwriteを使用するには、PosixPathを文字列に変換する必要があります。

多分試してみてください。また

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

pathlib docsで説明したように、適切な連結を使用します。

0

あなたはPosixPath+をoperan使用しますが、/

# before 
    cv2.imwrite(path + "/" + "photo.png", img) 
    # after 
    cv2.imwrite(path/"photo.png", img) 
関連する問題