打开图像 (jpg) 文件,执行分析并移动到下一个图像我对使用 JMP 进行自动图像处理和分析非常感兴趣,并且我有一个脚本(很大程度上基于 John Pontes 插件 - 以及从他出色的博客中收集的信息JMP 博客作者 John Ponte ) 我可以在图像上一次运行一个图像,但我接下来真正想做的是创建一个执行以下操作的“循环”脚本
- 计算目录中 .jpg 文件的数量。
- 一个接一个地打开一个图像,将可用信息(我正在使用 John Pontes 图像分析器插件和脚本)放入数据表中
- 进行基本分析(列和行的平均值等)
- 用 jpg 文件名保存它
- 关闭文件并移动到下一个图像。
我对此有很多小问题,但主要问题是当我使用以下内容时
为了(一世= 1 ,一世<= N 项(文件) ,一世++,
如果(以。。结束(文件[一世] , “.jpg” ) ,
打开(文件[一世] ) ;
);
打开(文件);在另一个程序中打开 jpg 文件(我不想更改的默认程序)。 我如何获得它以便它使用以下方法在 JMP 中打开(或者如果它更好的话)
图像=新图片( “.jpg的文件名” ) ;
w =新窗户( “图片” ,图像) ;
然后我可以执行分析并关闭所有这些并循环返回,直到所有图像都被分析完。
[*由工作人员 sseligman 编辑为原始帖子。 用户问题的第二部分在此处添加到原始帖子中。]
非常抱歉,我在原始帖子中不够清楚。 我要做的是将像素信息放入数据表中,而不是原始图像本身。
这实际上是自动化图像到数据表 JSL已编写的脚本,但会遍历文件夹中的每个图像,并将结果数据表与对同一文件夹中像素的任何结果分析一起保存。
x & y 坐标以及 RGB、I 和 HSL 足以让我进行所需的任何分析。 我附上了一个示例数据表,我可以对其进行分析,我还附上了从中获取这些数据的原始图像,我有几千个我需要处理的,所以一次做一个将是几乎不可能。
再次为原始帖子中的糟糕措辞和缺乏明确性表示歉意。
问候
大卫
回复:打开图像(jpg)文件,执行分析并移动到下一个图像合并两个对该帖子的回复作为解决方案。
员工的第 1 部分@Craige_Hales :
path = "$desktop/temp/";
files = Files In Directory( path );
For( ifile = 1, ifile <= N Items( files ), ifile++,
filename = files[ifile];
If( Right( filename, 4 ) == ".jpg",
pic = Open( path || filename, "jpg" );
jslcolor = pic << getpixels();
{red, green, blue} = Color To RGB( jslcolor );
{hue, lightness, saturation} = Color To HLS( jslcolor );
nr = N Rows( jslcolor );
nc = N Cols( jslcolor );
dt = New Table( Substr( filename, 1, Length( filename ) - 4 ),
addrows( nr * nc ),
New Column( "x" ),
New Column( "y" ),
New Column( "red", setvalues( red ) ),
New Column( "green", setvalues( green ) ),
New Column( "blue", setvalues( blue ) ),
New Column( "hue", setvalues( hue ) ),
New Column( "lightness", setvalues( lightness ) ),
New Column( "saturation", setvalues( saturation ) ),
);
irow = 0;
For( iy = 1, iy <= nr, iy++,
For( ix = 1, ix <= nc, ix++,
irow++;
dt:y[irow] = iy;
dt:x[irow] = ix;
)
);
// do something with dt
Wait( 1 );
Close( dt, "nosave" );
);
);
员工的第 2 部分@约翰庞特:
我要建议的一件事是,您可以使用 NewImage(),而不是 Open() 作为图像文件。 Open() 是一个更通用的函数,它必须弄清楚你正在打开什么。 在该过程中,它使用操作系统功能,例如在另一个程序中打开您的图像。 img = NewImage("文件名.jpg");将打开图像文件并创建一个 JSL 图像,将句柄返回给您。
另一个建议是您可以使用我在文件交换上执行的另一个脚本(在图像分析器之前),称为图像到数据表. 它会将您的图像转换为数据表,类似于图像分析器,但您不会获得图像分析器的所有其余功能。
将其包装在循环中@Craige_Hales显示(上图),你应该很高兴。
回复:打开图像(jpg)文件,执行分析并移动到下一个图像<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />我刚看到这篇文章,想补充几点,以防它仍然有用。
我要建议的一件事是,您可以使用 NewImage(),而不是 Open() 作为图像文件。 Open() 是一个更通用的函数,它必须弄清楚你正在打开什么。 在该过程中,它使用操作系统功能,例如在另一个程序中打开您的图像。 img = NewImage("文件名.jpg");将打开图像文件并创建一个 JSL 图像,将句柄返回给您。
另一个建议是您可以使用我在文件交换上执行的另一个脚本(在图像分析器之前),称为图像到数据表. 它会将您的图像转换为数据表,类似于图像分析器,但您不会获得图像分析器的所有其余功能。
将其包装在循环中克雷格@JMP显示(上图),你应该很高兴。
回复:打开图像(jpg)文件,执行分析并移动到下一个图像path = "$desktop/temp/";files = Files In Directory( path );For( ifile = 1, ifile <= N Items( files ), ifile++, filename = files[ifile]; If( Right( filename, 4 ) == ".jpg", pic = Open( path || filename, "jpg" ); jslcolor = pic << getpixels(); {red, green, blue} = Color To RGB( jslcolor ); {hue, lightness, saturation} = Color To HLS( jslcolor ); nr = N Rows( jslcolor ); nc = N Cols( jslcolor ); dt = New Table( Substr( filename, 1, Length( filename ) - 4 ), addrows( nr * nc ), New Column( "x" ), New Column( "y" ), New Column( "red", setvalues( red ) ), New Column( "green", setvalues( green ) ), New Column( "blue", setvalues( blue ) ), New Column( "hue", setvalues( hue ) ), New Column( "lightness", setvalues( lightness ) ), New Column( "saturation", setvalues( saturation ) ), ); irow = 0; For( iy = 1, iy <= nr, iy++, For( ix = 1, ix <= nc, ix++, irow++; dt:y[irow] = iy; dt:x[irow] = ix; ) ); // do something with dt Wait( 1 ); Close( dt, "nosave" ); ););回复:打开图像(jpg)文件,执行分析并移动到下一个图像非常抱歉,我在原始帖子中不够清楚。 我要做的是将像素信息放入数据表中,而不是原始图像本身。
这实际上是自动化图像到数据表 JSL已编写的脚本,但会遍历文件夹中的每个图像,并将结果数据表与对同一文件夹中像素的任何结果分析一起保存。
x & y 坐标以及 RGB、I 和 HSL 足以让我进行所需的任何分析。 我附上了一个示例数据表,我可以对其进行分析,我还附上了从中获取这些数据的原始图像,我有几千个我需要经历的,所以一次做一个将是几乎不可能。
再次为原始帖子中的糟糕措辞和缺乏明确性表示歉意。
大卫。
回复:打开图像(jpg)文件,执行分析并移动到下一个图像添加文件类型参数。那么返回的值将是一个图片对象。即使您混合搭配PNG、JPG、GIF,它也可能会起作用;它告诉 JMP 返回图片,而不是退回到扩展的操作系统默认程序。
open("$desktop/setFont.PNG","PNG")
新图片(
字符到斑点(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
或使用 newimage 获取图片对象。
newimage("$desktop/setFont.PNG")
新图片(
字符到斑点(
"640745eJxkugdUU0v3PgyCIFKiotKDCsL10ovUEFBQRJodKQJKLyF0gpSIKIjSpEgnCgoqVVrooRk6obcACUaaG...
newimage 更简单;如果图像是 URL 或 Blob,则可能需要打开。
回复:打开图像(jpg)文件,执行分析并移动到下一个图像这应该将文件夹中的图像文件放入 JMP 表中:
// ian.cox@jmp.com :23Jun2014
名称默认到这里( 1 ) ;
目录=选择目录( “选择一个包含图像文件的目录:” ) ;
列表=文件目录(目录) ;
如果( N项(列表) < 1 ,打印( “在文件夹中找不到文件” ||目录|| “。” ) ;嘟() ;扔()) ;
dt =新表( “图片来自” ||目录,
新列( “文件路径” ,特点,标称) ,
新列( “图片” ,表达) ,添加行( N项(列表))
) ;
为了( F = 1 , F <=物品(列表) , F ++,
fp =目录|| “/” ||列表[ F ] ;
柱子( dt , “文件路径” )[ F ] = fp ;
尝试(柱子( dt , “图片” )[ F ] =新图片( fp )) ; // 如果不是图像文件,请使用“Try()”
) ;