类型错误:+ 不支持的操作数类型:'PosixPath' 和 'str'

use*_*674 17 python opencv

我有一个错误

TypeError: unsupported operand type(s) for +: 'PosixPath' and 'str'
Run Code Online (Sandbox Code Playgroud)

我的代码如下

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)
Run Code Online (Sandbox Code Playgroud)

回溯说代码cv2.imwrite~是错误的。我真的无法理解为什么这是错误的。是这种类型的路径错误吗?还是我使用这种方法是错误的?我应该如何解决这个问题?

fai*_*din 15

不能+PosixPath对象上使用操作数。相反,您应该/在处理pathlib库时使用:

    # before
    cv2.imwrite(path + "/" + "photo.png", img)
    # after
    cv2.imwrite(path / "photo.png", img)
Run Code Online (Sandbox Code Playgroud)


SCB*_*SCB 13

如果您仔细查看您的类型错误,实际上是因为您试图+PosixPath类型和str. 您需要PosixPath先将转换为字符串,然后才能使用imwrite.

也许尝试:

cv2.imwrite(str(path) + "/" + "photo.png", img)
Run Code Online (Sandbox Code Playgroud)

或者,使用pathlib docs 中描述的正确连接。

  • 道格的帖子将是正确的方法,尽管很高兴知道如何将其转换为 str! (2认同)

Ahm*_*mad 7

首先将 PosixPath 对象 ( path) 转换为字符串:

str(path) + "/" + "photo.png"
Run Code Online (Sandbox Code Playgroud)