我正在尝试读取图像并调整主目录文件中图像的大小,但无法正常工作,请帮助如何读取图像并调整大小。
import cv2
from PIL import Image
img = cv2.resize(cv2.read('C://Users//NanduCn//jupter1//train-scene classification//train"', (28, 28)))
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-103-dab0f11a9e2d> in <module>()
1 import cv2
2 from PIL import Image
----> 3 img = cv2.resize(cv2.read('C://Users//NanduCn//jupter1//train-scene classification//train"', (28, 28)))
AttributeError: module 'cv2.cv2' has no attribute 'read'
答案 0 :(得分:1)
读取特定扩展名的所有图像,例如“ * .png”,可以使用cv::glob
功能
void loadImages(const std::string& ext, const std::string& path, std::vector<cv::Mat>& imgs, const int& mode)
{
std::vector<cv::String> strBuffer;
cv::glob(cv::String{path} + cv::String{"/*."} + cv::String{ext}, strBuffer, false);
for (auto& it : strBuffer)
{
imgs.push_back(cv::imread(it, mode));
}
}
std::vector<cv::Mat> imgs;
loadImages("*.png", "/home/img", imgs, cv::IMREAD_COLOR);
然后调整缓冲区中每个图像的大小
for (auto& it : imgs)
{
cv::resize(it, it, cv::Size{WIDTH, HEIGHT});
}
应该容易地重写为python,因为几乎所有函数/数据类型在python中都具有等效功能。
filenames = glob("/home/img/*.png").sort()
images = [cv2.imread(img) for img in filenames]
for img in images:
cv2.resize(img, (WIDTH, HEIGHT))
代码分成几部分而不是单行代码,因为至少对于我来说,它更具可读性。
答案 1 :(得分:0)
Using glob module:
dpath = "C:/your_path/"
fmt = "png"
size = (28, 28)
imgs = [cv2.resize(cv2.imread(fpath), size) for fpath in glob.glob("{}/*.{}".format(dpath, fmt))]
答案 2 :(得分:0)
这里的错误是您为cv2.imread提供了一个目录,但它仅接受图像路径作为输入,否则会引发错误。
所以我们可以做的是使用os模块解析文件夹中的所有文件,然后逐个读取图像,然后调整大小并对其执行其他操作。
import os
import cv2
from PIL import Image
size = (28, 28)
imagesPath = "C://Users//NanduCn//jupter1//train-scene classification//train"
for imageName in os.listdir(imagesPath):
imageFullPath = os.path.join(imagesPath,imageName)
img = cv2.resize(cv2.imread(imageFullPath), size)
#do your processing here
我在这里还认为您在该文件夹中只有图像。如果其中有其他类型的文件或其他文件夹,则可以在os.path.join行之前打勾。
希望这会有所帮助。