2016-08-14 5 views
0

Я хочу сохранить метаданные изображения, но мой код разбивает все метаданные. Как это остановить? Я запускаю этот скрипт из командной строки MATLAB SDE. Код ниже:Как сохранить метаданные изображений в MATLAB imwrite?

p = which('G0011363.JPG'); 
filelist = dir([fileparts(p) filesep '*.JPG']); 
fileNames = {filelist.name}; 
fileNames_size = size(fileNames,2); 
number_of_colums = fileNames_size; 
for k = 1:number_of_colums 
    imwrite(undistortImage(imread(fileNames{k}), cameraParams2cof, 'OutputView', 'valid'), (strcat(int2str(k), 'R2_3COF_ONRcorrected.jpg'))); 
end 
+0

'imread' не читает в метаданных только пиксельных данных. Итак, как бы вы ожидали, что 'imwrite' будет писать метаданные, если он никогда не читается? – Suever

ответ

1

Вы можете прочитать в метаданных с использованием imfinfo, и вы можете написать конкретные метаданные в файл изображения с imwrite (до тех пор, как конкретный тег поддерживается) в виде пар ключ/значение. Посмотрите на help imwrite для получения дополнительной информации.

Пример:

>> I = imread('NeverGonnaGiveYouUp.png');   
>> imwrite(I, 'output.png', 'png','Author','Rick Astley'); 
>> Iinfo = imfinfo('output.png'); 
>> Iinfo.Author 
ans = 
Rick Astley 
+0

Спасибо за ответ, он поставил меня на правильный путь. Последний код, который работал для меня, приведен ниже: load ('C: \ mypath \ workspace.mat') p = which ('G0011363.JPG'); filelist = dir ([fileparts (p) filesep '* .JPG']); fileNames = {filelist.name}; \t fileNames_size = размер (имя_файла, 2); number_of_colums = fileNames_size; \t для k = 1: number_of_colums k2 = imfinfo (fileNames {k}); k3 = k2.FileModDate; imwrite (undistortImage (imread (fileNames {k}), cameraParams2cof, 'OutputView', 'valid'), (strcat (int2str (k), '_R2_3COF.jpg')), 'jpg', 'comment', k3) ; end – Andrew

+1

Активировано для rickroll. отсутствовал с 2006 года – hammus

0

Я нашел решение, но он не совершенен ...

Примечание: Опубликованная решение применяется ОС Windows.


Где ссылка на метаданные изображения, я полагаю, вы имеете в виду Exif data.

Согласно https://www.mathworks.com/matlabcentral/answers/152559-writing-exif-data-to-jpg

К сожалению, в настоящее время нет функциональность вне-полки для записи данных EXIF ​​в файл изображения в MATLAB. Вы можете читать только данные EXIF ​​из файла изображения (exifread и imfinfo).

Вы можете использовать run_exiftool сделать копию Exif данных от одного изображения к другому:

  1. Скачать и извлечь exiftool-10.25.zip
  2. Скопируйте файл ExifTool (-k) .exe в рабочую папку и переименовать файл в exiftool.exe
  3. Скачать run_exiftool из https://www.mathworks.com/matlabcentral/fileexchange/42000-run-exiftool, Копир getexif.m и putexif.m к вашей рабочей папке.

Попробуйте следующий пример кода:

%Copy the file from c:\Program Files\MATLAB\R2014b\mcr\toolbox\matlab\demos\ to local folder. 
%Note: ngc6543a.jpg is part of Matlab installation. 
copyfile([matlabroot, '/mcr/toolbox/matlab/demos/ngc6543a.jpg'], cd); 

%Read image 
I = imread('ngc6543a.jpg'); 

%Save I to myfile.jpg and add Exif data of ngc6543a.jpg to myfile.jpg 
status = putexif(I, 'myfile.jpg', 'ngc6543a.jpg'); 

%Read Exif data from ngc6543a.jpg 
[ngc6543a_exifdata, ngc6543a_nf] = getexif('ngc6543a.jpg'); 

%Read Exif data from myfile.jpg 
[myfile_exifdata, myfilenf] = getexif('myfile.jpg'); 

Я получаю предупреждение: Warning: Exif tags may not have been copied, но это, кажется, работает.

Результат:

>> ngc6543a_exifdata 

ngc6543a_exifdata = 

ExifToolVersion     : 10.25 
FileName      : ngc6543a.jpg 
Directory      : . 
FileSize      : 27 kB 
FileModifyDate     : 2014:07:27 12:00:28+03:00 
FileAccessDate     : 2016:08:14 17:42:23+03:00 
FileCreateDate     : 2016:08:14 17:18:27+03:00 
FilePermissions     : rw-rw-rw- 
FileType      : JPEG 
FileTypeExtension    : jpg 
MIMEType      : image/jpeg 
JFIFVersion      : 1.01 
ResolutionUnit     : None 
XResolution      : 1 
YResolution      : 1 
Comment       : CREATOR: XV Version 3.00b Rev: 6/15/94 Quality = 75, Smoothing = 0. 
ImageWidth      : 600 
ImageHeight      : 650 
EncodingProcess     : Baseline DCT, Huffman coding 
BitsPerSample     : 8 
ColorComponents     : 3 
YCbCrSubSampling    : YCbCr4:2:0 (2 2) 
ImageSize      : 600x650 
Megapixels      : 0.390 


>> myfile_exifdata 

myfile_exifdata = 

ExifToolVersion     : 10.25 
FileName      : myfile.jpg 
Directory      : . 
FileSize      : 75 kB 
FileModifyDate     : 2016:08:14 18:08:51+03:00 
FileAccessDate     : 2016:08:14 18:08:51+03:00 
FileCreateDate     : 2016:08:14 17:40:22+03:00 
FilePermissions     : rw-rw-rw- 
FileType      : JPEG 
FileTypeExtension    : jpg 
MIMEType      : image/jpeg 
JFIFVersion      : 1.01 
ResolutionUnit     : None 
XResolution      : 1 
YResolution      : 1 
Comment       : CREATOR: XV Version 3.00b Rev: 6/15/94 Quality = 75, Smoothing = 0. 
ImageWidth      : 600 
ImageHeight      : 650 
EncodingProcess     : Baseline DCT, Huffman coding 
BitsPerSample     : 8 
ColorComponents     : 3 
YCbCrSubSampling    : YCbCr4:2:0 (2 2) 
ImageSize      : 600x650 
Megapixels      : 0.390 
Смежные вопросы