2017-09-30 9 views
-1

大きな画像データセットを解析しようとしています。私はそこにある各ファイルを処理しています。私はファイルパスが好きです。filepath.Walkfuncをゴルーチンとして実行する方法

package main 

import (
    "fmt" 
    "image/color" 
    "image/png" 
    "math/rand" 
    "os" 
) 

var (
    Black = color.Gray{0} 
) 

func getRandFloatNumber(min, max float32) float32 { 
    return (rand.Float32()*2 - min) * max 
} 

func openImage(path string, info os.FileInfo, err error) error { 
    infile, _ := os.Open(path) 
    defer infile.Close() 
    img, err := png.Decode(infile) 
    if err != nil { 
     return nil 
    } 

    array := make([]float32, 128*128) 
    for y := 0; y < 128; y++ { 
     for x := 0; x < 128; x++ { 
      c := color.GrayModel.Convert(img.At(x, y)).(color.Gray) 
      if c == Black { 
       array[x*y] = getRandFloatNumber(0.7, 0.95) 
      } else { 
       array[x*y] = getRandFloatNumber(0.1, 0.25) 
      } 
     } 
    } 

    fmt.Println(info.Name()) 

    return nil 
} 

openImageをゴルー​​チンとして実行するにはどうすればよいですか? このコードを最適化する方法は?

+0

'go openImage()' –

答えて

0

あなたはgoroutineで関数を呼び出すためにfilepath.Walkを取得することはできませんが、WalkFuncで単にゴルーチンを開始することができます。

package main 

import (
    "os" 
    "path/filepath" 
) 

func main() { 
    filepath.Walk("/my/dir", func(path string, info os.FileInfo, err error) error { 
      if err != nil { 
        return err 
      } 

      if info.IsDir() { 
        return nil 
      } 

      // Check more criteria if necessary. Also consider limiting the number 
      // of concurrent goroutines. 

      go openImage(path, info) 

      return nil 
    }) 
} 

func openImage(path string, info os.FileInfo) { 
} 
関連する問題