如何从我的主目录读取图像并调整其大小

时间:2018-12-19 10:51:29

标签: python opencv opencv3.0

我正在尝试读取图像并调整主目录文件中图像的大小,但无法正常工作,请帮助如何读取图像并调整大小。

    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'

3 个答案:

答案 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行之前打勾。

希望这会有所帮助。