Python 错误:(-2)在函数imwrite中找不到指定扩展名的写入程序_

Python 错误:(-2)在函数imwrite中找不到指定扩展名的写入程序_,python,numpy,opencv,cv2,Python,Numpy,Opencv,Cv2,我有以下类似的数据: 10-0 = [ [1915, 387, 1933, 402], [3350, 387, 3407, 391], [842, 505, 863, 521], ] img_path = PATH_TO_SOURCE+str(folder_blueprint[0])+'-'+str(folder_blueprint[1])+'.png' img = cv2.imread(img_path) 10-0是图像的凭证(用于查找路径),其中的值是框或矩形

我有以下类似的数据:

10-0 = [
    [1915, 387, 1933, 402],
    [3350, 387, 3407, 391],
    [842, 505, 863, 521],
 ]
img_path = PATH_TO_SOURCE+str(folder_blueprint[0])+'-'+str(folder_blueprint[1])+'.png'
img = cv2.imread(img_path) 
10-0是图像的凭证(用于查找路径),其中的值是框或矩形的坐标,我正在研究的公式是
cv2。矩形(img,(x1,y1),(x2,y2),(255,0,0),2)
,注意10-0是字典中一个元素的键

我的代码:

import cv2
    for key in my_dict:
        folder_blueprint = re.findall(r'\d+', key)
        img = PATH_TO_SOURCE+str(folder_blueprint[0])+'-'+str(folder_blueprint[1])+'.png'
        for line in key:
            line_number = 0
            cv2.rectangle(img,( my_dict[key][line_number][0],my_dict[key][line_number][1]),(my_dict[key][line_number][2],my_dict[key][line_number][3]),(255,0,0),2)
            # cv2.imread(img)
            line_number = line_number + 1
        cv2.imwrite(FULL_PATH_TO_DESTINATION, img)
        cv2.imshow(FULL_PATH_TO_DESTINATION, img)
        k = cv2.waitKey(0)  # 0==wait forever
我最后想要的是在新目标文件夹中感兴趣的区域周围带有红色框的图像,保留原始图像不变。 我在这里提到了类似的问题,带有相同的错误信息,但它们对我的案例没有帮助

编辑:我调整了以下内容:

10-0 = [
    [1915, 387, 1933, 402],
    [3350, 387, 3407, 391],
    [842, 505, 863, 521],
 ]
img_path = PATH_TO_SOURCE+str(folder_blueprint[0])+'-'+str(folder_blueprint[1])+'.png'
img = cv2.imread(img_path) 
然后将int()放在我必须放在的
cv2.rectangle
部分,现在我有一个错误
错误:(-2)在函数imwrite中找不到指定扩展名的编写器。\ucode>

请阅读此处

如果您正在绘制一个矩形,那么应该将numpy数组传递给
rectangle
函数;然后,您可以使用
imwrite
将图像写入特定路径

我假设您应该有一个
for
循环来迭代所有图像,其帧是一个彩色矩形

以下是使用PIL将图像转换为numpy数组的示例:

import numpy as np
from PIL import Image as im

# read image into a PIL data type: PIL.Image.Image, note it is not path/string.
img = im.open("sample.png").convert('RGBA')

# conver to numpy.nparray
arr = np.array(img)

# draw a rectangle on your existing image object
cv2.rectangle(img, (384,0),(510,128),(0,255,0),3)

# once you finished drawing, you can write it to a specific file.
cv2.imwrite("write_to_new_file.png", img)
您可以查看此处的
rectangle
函数和此处的新文件

另外,您可以在Python3中使用以下命令安装PIL:


pip3安装--升级映像

确保指向目标的完整路径的映像扩展名也在文件名字符串中提到。
读取文件有.png,但我认为您要写入图像的输出路径应该有路径以及文件名和扩展名

您的问题不在于
读取
写入
,如果您在图像周围绘制矩形,然后你应该给你的
rectangle
函数一个numpy数组。@stuchash确定其中的任何指导,如我的代码中的文档链接或调整。Kindlynote注意,
如何编写
的链接与我在问题中分享的代码末尾使用的代码完全相同,我调整了代码的以下部分'img_path=im.open(FULL_path).convert('RGBA')img=cv2.imread(img_path)arr=np.array(img)`但仍然不起作用,给我这个错误
img=cv2.imread(img_path)TypeError:内置操作的参数类型不正确
@user9266899是的,我注意到了这一点;然而,它与我在回答中所显示的流程不同。在您的评论中,您将转换的
img
视为
img_路径
;它不再是一条路了。您只需使用
np.array
转换它,而无需先读取它。i、 在转换之前,您不需要
img=cv2.imread(img\u路径)
。您可以在完成绘制后读取它。@user9266899而您在注释中出现错误的原因是您给了
numpy.array
一个错误的参数。i、 e.
cv2.imread
返回的
img
。使用注释中的术语,您可能希望执行
arr=np.array(img_path)
无需使用numpy即可修复任何问题。@user9266899很好,问题已解决。请考虑改写你的问题,以解决所发生的问题。或者,如果让它离开,最好重写标题,以表明这是一个重大错误。我认为你原来的标题是正确的;如果你正在使用numpy,我相信这就是你要做的。其他人可能会再次遇到同样的问题。很好的一天!我就是这样。谢谢。