我们有许多内部图像格式,我在Matlab中处理。我有所有这些的读/写功能。为了具体,请考虑TGA图像格式,其中存在文件交换image reader。
Matlab对imread支持的图像格式有合理的拖放支持。
也就是说,您可以从资源管理器中拖动图像,将其放在"工作区"窗格,Matlab将读入图像,并将其复制到您的工作区。
我希望能够添加拖放支持,并且能够支持TGA文件。 (例如,imread对文件名有很好的自动完成功能,tga_read_image没有。)
答案 0 :(得分:4)
我认为this正是您所寻找的。引用官方文档:
打开名称会打开相应的指定文件或变量 应用强>
您可以通过定义自己的功能来扩展open的功能 openxxx形式的文件处理函数,其中xxx是一个文件 延期。例如,如果你创建一个openlog函数,那么 open函数调用openlog来处理任何带有.log的文件 延期。 open函数返回由您定义的任何单个输出 功能
例如:
function opentga(file)
% Your logic for reading and, eventually,
% displaying TGA files when drag and drop
% or other opening events occur.
end
这是一个直接从链接中获取的完整工作示例:
function opentxt(filename)
[~, name, ext] = fileparts(filename);
fprintf('You have requested file: %s\n', [name ext]);
if exist(filename, 'file') == 2
fprintf('Opening in MATLAB Editor: %s\n', [name ext]);
edit(filename);
else
wh = which(filename);
if ~isempty(wh)
fprintf('Opening in MATLAB Editor: %s\n', wh);
edit(wh);
else
warning('MATLAB:fileNotFound', ...
'File was not found: %s', [name ext]);
end
end
end
备用路径包括重载uiopen
函数,如this文件交换发布中所示。
答案 1 :(得分:3)
从Tommaso's answer开始,我在MATLAB路径上创建了以下M文件:
function out = openics(filename)
img = readim(filename);
if nargout==1
out = img;
else
[~,varname] = fileparts(filename);
disp(['assigning into base: ',varname])
assignin('base',varname,img);
end
将ICS文件拖放到MATLAB的命令窗口中会在命令行中显示以下内容:
>> uiopen('/Users/cris/newdip/examples/cermet.ics',1)
assigning into base: cermet
检查:
>> whos cermet
Name Size Bytes Class Attributes
cermet 256x256 65714 dip_image
读取uiopen
的代码(您只需键入edit uiopen
)表明这会使用文件名调用open
,然后使用文件名调用openics
并且不输出论点。
您也可以输入
img = open('/Users/cris/newdip/examples/cermet.ics');
致电openics
并将图片加载到变量img
。
注1:我正在使用ICS,因为我没有任何TGA图像可供测试。 ICS是显微镜图像文件格式。
注2:readim
是DIPimage 中的一个函数
注3:这很酷,我从来没有费心去尝试将文件拖放到MATLAB上。 :)子>
答案 2 :(得分:1)
其他答案解决了“拖放”问题。它们没有解决如何将专有图像格式集成到 imread
中的问题。这可以通过 imformats
命令直接完成。
我担心如何/为什么花了 3.5 年才弄明白这个问题仍然没有答案......该功能已经存在了 15 年以上。