python - 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模块中的一些拼写错误但找不到解决方案
解决方案
第一次在 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))
我希望我能帮助你。
推荐阅读
- c# - ASP.NET Core 5 MVC / C#:根据另一个模型更改模型的值
- laravel - 我在laravel中有错误的路线
- vbscript - 如何处理 XMLHTTP 请求中未解析的服务器地址?
- c++ - 无法在我的 outputfile.txt 中显示输出
- java - 在实现 Material Search View 时,Textview 在首次启动时不显示
- reactjs - Gatsby Bootstrap 下拉导航不会向下切换
- amazon-web-services - 是否有可能在 Amazon Lex 机器人之前/之后集成翻译?
- php - 从认证网站获取数据(室温)以将其可视化
- opengl - 为什么我不能在四边形上渲染我的深度图?
- pycharm - 可以在从命令行运行的 Python 脚本上运行 PyCharm CE 的 Python 调试器吗?