我有一个容易解决的任务。好吧,我是这么认为的。现在已经花了2个小时,但我无法修复该错误。 基本上,我只想按目录中的特定速率调整每个图像的大小。 所以路径X包含很多图像,我想调整所有图像的大小。 我的方法如下:
import cv2
import glob
images = [cv2.imread(file) for file in glob.glob("C:\\Users\\Laptop\\Desktop\\imgs*.png")]
for file in images:
try:
img = cv2.imread(file)
img_size = cv2.resize(img, None, fx=0.5, fy= 0.5)
cv2.imwrite(file, img_size)
except Exception as e:
print(e)
我也使用os.listdir()在os库中尝试过
但是我总是会遇到类似这样的异常:
OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\imgproc\src\resize.cpp:3784: error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'
我不知道出了什么问题,或者是它不能正确加载图像,还是我只是忘记了一些非常重要的东西。
也许有人可以帮助我...
答案 0 :(得分:0)
首先阅读所有图像:
images = [cv2.imread(file) for file in glob.glob("C:\\Users\\Laptop\\Desktop\\imgs*.png")]
然后针对每个图像,再次调用cv2.imread
:
for file in images:
img = cv2.imread(file)
第二个imread
毫无意义。您正在传递图像数组,而不是文件名!
您可能想像这样循环:
for file in glob.glob("C:\\Users\\Laptop\\Desktop\\imgs*.png"):
try:
img = cv2.imread(file)
img_size = cv2.resize(img, None, fx=0.5, fy= 0.5)
cv2.imwrite(file, img_size)
except Exception as e:
print(e)
答案 1 :(得分:0)
好吧,经过大量尝试。我自己想办法。 如果有人感兴趣,下面是代码:
import glob
import cv2
import os
import random
path = "C:\\Users\\Laptop\\Desktop\\imgs"
for file in os.listdir(path):
numb = random.randint(0,1000)
print("Test")
img = cv2.imread(os.path.join(path, file))
img_size = cv2.resize(img, None, fx=0.5, fy= 0.5)
cv2.imwrite("C:\\Users\\Laptop\\Desktop\\imgs\\" + str(numb) + ".jpg", img_size)