MATLAB Answers

0

How to add images continuously to a imageDatastore

Chinthaka Amarasinghe さんによって質問されました 2019 年 8 月 6 日
最新アクティビティ Walter Roberson
さんによって コメントされました 2019 年 8 月 10 日
Hi,
I'm new to the Matlab and using a imageDatastore object to store images comming from a camera, I want to update an existing image data store continuously. Is there a way to do that...?
Thanks..

  1 件のコメント

What would this be like if it were available? Normally you create a datastore and loop, hasdata(), read(), process.
Now there are three possibilities:
  1. new images are added to the datastore more quickly than you can process images, and there are an indefinite number of images. In this case you can never get to the end of the data
  2. new images are added faster than you can process, but only for a definite time, after which you can catch up. In this case you could delay starting until all of the images are available
  3. new images are added more slowly than you can process them. In this case you will keep running into the end of the current datastore and will have to know to wait for more
For some of these possibilities I wonder whether you should just occasionally poll the directory for new files and process them. If you are using ms Windows then there is even a way using .NET to set up a callback when new files arrive.

サインイン to comment.

1 件の回答

 채택된 답변

Since the Files and Labels properties of the imageDatastore function return cell array of character vectors, you can directly use these to append/concatenate using the cat function.
For example:
imds = imageDatastore({'street1.jpg','street2.jpg','peppers.png','corn.tif'}); % Existing datastore
imds_new = imageDatastore({'cameraman.tif'}); %to append to the existing datastore
imds_cat = imageDatastore(cat(1, imds.Files, imds_new.Files));
imds_cat.Labels = cat(1, imds.Labels, imds_new.Labels)
imds = imds_cat;

  1 件のコメント

What the above does is have an existing datastore, and build a new one with new files and labels, and then extract the information from the two datastore and use it to build a third datastore, after which you would probably delete the other two.
Effectively the only reason to use the first two datastore here is to take advantage of the logic to discover files and labels.
In a situation where you have new files continually being dropped into a directory, then to use the above you would be needing to continually figuring out which files were new compared to the other ones in the directory, which is a process that is likely to involve reading the entire directory again, in which case you might as well just delete the old datastore.

サインイン to comment.



Translated by