首页 > 解决方案 > OpenCV(4.2.0),imwrite() 到子文件夹会破坏模块;cv2.error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'`'

问题描述

我正在用python中的计算机视觉练习,并试图调整我存储在sript所在子文件夹中的一些图像的大小,我使用了以下代码

import cv2
import glob

immagini = glob.glob('.\immagini\*.jpg')
print(immagini)

for image in immagini :
    img = cv2.imread(image,0)
    re= cv2.resize(img,(100,100))
    cv2.imshow("*",re)
    cv2.waitKey(500)
    cv2.destroyAllWindows()
    cv2.imwrite("resized_"+image , re)

,它似乎找到了图像并成功调整了它们的大小,但是它没有保存它们;因此我应用了这个更改来访问完整路径

import cv2
import glob
import os

path =r'C:\Users\...\ComputerVision\immagini'
immagini = glob.glob('.\immagini\*.jpg')
print(immagini)

for image in immagini :
    img = cv2.imread(image,0)
    # print(type(immagini))
    # print(img)
    os.chdir(path)
    re= cv2.resize(img,(100,100))
    cv2.imshow("yo",re)
    cv2.waitKey(500)
    cv2.destroyAllWindows()
    cv2.imwrite("resized_"+image , re)
    print(os.listdir(path))

现在我得到这个带有附加错误的输出

`'.\\immagini\\galaxy.jpg', '.\\immagini\\kangaroos-rain-australia_71370_990x742.jpg', '.\\
immagini\\Lighthouse.jpg', '.\\immagini\\Moon sinking, sun rising.jpg']
['galaxy.jpg', 'kangaroos-rain-australia_71370_990x742.jpg', 'Lighthouse.jpg', 'Moon sinkin
g, sun rising.jpg']
Traceback (most recent call last):
  File ".\script1.py", line 15, in <module>
    re= cv2.resize(img,(100,100))
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:40
45: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'`'

有人可以解释一下这里发生了什么吗?为什么我有两个打印件(后者是我想要的一个)以及如何纠正错误并将调整大小的文件保存在正确的目录中?

PS这是我的第一个问题所以请善待,我发现这种错误是由于cv2模块中的一些拼写错误但找不到解决方案

标签: pythonopencv

解决方案


第一次在 for 循环中,通过 os.chdir(path) 更改 immagini 目录,显示图像没有问题。

第二次在 for 循环中,图像变量指示 .\immagini\galaxy.jpg 这是相对路径,但当前是 immagini 目录,因此图像指向错误路径,其中 img 变量已经为空。

最后,如果要将调整大小的图像保存在同一目录中,我认为您必须在 for 循环中从图像变量中拆分路径和文件名。

这是第一个:

import cv2
import glob
import os

immagini = glob.glob('.\immagini\*.jpg')
#print(immagini)

for image in immagini :
    img = cv2.imread(image,0)
    re= cv2.resize(img,(100,100))
    cv2.imshow("images",re)
    cv2.waitKey(500)
    fname = os.path.basename(image)
    fdir = os.path.dirname(image)
    simage = fdir + os.path.sep +"resized_"+ fname
    cv2.destroyAllWindows()
    cv2.imwrite(simage, re)

第二个:

import cv2
import glob
import os

path =r'C:\Users\...\ComputerVision\immagini'
immagini = glob.glob('.\immagini\*.jpg')

for image in immagini:
    os.chdir(path)
    fname = os.path.basename(image)
    img = cv2.imread(fname,0)
    # print(type(immagini))
    # print(img)
    #os.chdir(path)
    re= cv2.resize(img,(100,100))
    cv2.imshow("yo",re)
    cv2.waitKey(500)
    cv2.destroyAllWindows()
    cv2.imwrite("resized_"+fname , re)
    print(os.listdir(path))

我希望我能帮助你。


推荐阅读