【问题标题】:Feed images 1by 1 from folder into function将文件夹中的图像 1by 1 馈送到函数中
【发布时间】:2017-02-04 14:07:08
【问题描述】:

我有一个输入图像的 INPUT_IMAGE_CHECK_ALL 函数。在 INPUT_IMAGE_CHECK_ALL 中有 7 个函数用于传递图像。

如何将文件夹 1 中的图像逐个输入 INPUT_IMAGE_CHECK_ALL 函数?

image = imread('6-Capmissing/capmissing-image078.jpg');

INPUT_IMAGE_CHECK_ALL(image);

INPUT_IMAGE_CHECK_ALL 代码:

function [  ] = INPUT_IMAGE_CHECK_ALL( image )

CHECK_FOR_CAP(image);
CHECK_FOR_NOLABEL(image);
CHECK_FOR_NOLABELPRINT(image);
CHECK_FOR_OVERFILLED(image);
CHECK_FOR_LABELNOTSTRAIGHT(image);
CHECK_FOR_UNDERFILLED(image);

end

我要输入 INPUT_IMAGE_CHECK_ALL 的图像位于名为 image001 到 image141 的文件夹“All”中。

【问题讨论】:

    标签: image matlab loops directory


    【解决方案1】:

    既然您知道要读取的图像的名称(image001, image002, ... 从 1 到 141),最简单的方法是使用循环,其中:

    • 使用函数sprintf构建名称
    • 使用您构建的名称读取图像
    • 为您的函数提供图像数据

    一个可能的实现可能是

    for img_idx=1:141
       img_name=sprintf('All/image%3.3d.jpg',img_idx)
       disp(['Reading ' img_name])
       the_image=imread(img_name);
       INPUT_IMAGE_CHECK_ALL(the_image);
    end   
    

    在上面的代码中:

    • 注意在调用sprintf时使用了format:%3.3d:这允许在文件名的构建中使用0数字进行填充,这样您就可以拥有001 , 002, ... 013 等等
    • 如果存储图像的文件夹 All 不在 MatlLab path 中,则必须在构建文件名时指定文件夹
    • 我使用the_image 作为存储图像数据的变量的名称,因为image(您正在使用的变量)是一个 MatLab 函数。
    • 对disp 函数的调用仅用于在CommandWindow 上打印有关脚本正在做什么(正在处理哪个图像)的消息;你可以删除它

    如果文件夹All 仅包含您要处理的图像,另一种可能是使用函数dir 获取图像列表以获取文件名

    函数dir 返回一个struct,其中存储了有关文件的信息。

    在这种情况下,您必须遍历 dir 返回的列表

    % Get the filenames of all the images in the folder "All"
    img_list=dir('All/image*.jpg')
    % Loops over the list of images
    for img_idx=1:length(img_list)
       img_name=['All/' img_list(img_idx).name]
       disp(['Reading ' img_name])
       the_image=imread(img_name)
       INPUT_IMAGE_CHECK_ALL(the_image);
    end
    

    希望这会有所帮助,

    卡普拉'

    【讨论】:

    • 我不能告诉你这有多么有用!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2018-12-02
    • 2012-08-23
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多