打開圖像 (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()”
) ;