2017-01-15 7 views
0

私は(freenectを使用していない)いくつかの深度イメージでgo-skeltrackライブラリを使用しようとしています。そのためには、kinect画像を自分のものに置き換えて、与えられた例を修正する必要があります。そのためには、画像を読み込み、後で[]uint16変数に変換する必要があります。私が試したコードは次のとおりです。Golang:image.imageをuint16に変換するには

./skeltrackOfflineImageを:onDepthFrameフォーム

func onDepthFrame(depth []uint16). 

を持っていますが、コンパイル中に、私は次のエラーを取得しています機能です

file, err := os.Open("./images/4.png") 
if err != nil { 
    fmt.Println("4.png file not found!") 
    os.Exit(1) 
} 
defer file.Close() 

fileInfo, _ := file.Stat() 
var size int64 = fileInfo.Size() 
bytes := make([]byte, size) 

// read file into bytes 
buffer := bufio.NewReader(file) 
_, err = buffer.Read(bytes) 

integerImage := binary.BigEndian.Uint16(bytes) 

onDepthFrame(integerImage) 

。 go:155:type []としてintegerImage(type uint16)を使用できませんonDepthFrameの引数のuint16

もちろん、配列の代わりに単一の整数を生成したということです。 Goデータ型の変換の仕方について私はかなり混乱しています。助けてください!

ご協力いただきありがとうございます。 Luis

+3

で他のイメージタイプを見てください。pngは一連のビッグエンディアンのuint16sではありません。あなたは正確に何をしようとしていますか? – JimB

答えて

0

binary.BigEndian.Uint16は、ビッグエンディアンのバイトオーダーを使用して(スライス内の)2バイトを16ビット値に変換します。あなたがuint16のスライスにバイトを変換したい場合は、あなたがbinary.Readを使用する必要があります:あなたは生のピクセルを得るために探しているよう

// This reads 10 uint16s from file. 
slice := make([]uint16, 10) 
err := binary.Read(file, binary.BigEndian, slice) 
0

ですね。そのような場合は、ファイルを直接バイナリとして読むことはお勧めしません。つまり、画像ファイルには生のピクセル値だけでなく、より多くの情報が含まれているため、ファイル形式を自分で解析する必要があります。それに対処するためのイメージパッケージにはすでにツールがあります。

このコードは正しい軌道上にあるはずです。 RGBA値を読み込むので、1ピクセルあたり4つの値があるため、長さwidth * height * 4のuint8の1D配列で終わります。

https://play.golang.org/p/WUgHQ3pRla

import (
    "bufio" 
    "fmt" 
    "image" 
    "os" 

    // for decoding png files 
    _ "image/png" 
) 

// RGBA attempts to load an image from file and return the raw RGBA pixel values. 
func RGBA(path string) ([]uint8, error) { 
    file, err := os.Open(path) 
    if err != nil { 
     return nil, err 
    } 

    img, _, err := image.Decode(bufio.NewReader(file)) 
    if err != nil { 
     return nil, err 
    } 

    switch trueim := img.(type) { 
    case *image.RGBA: 
     return trueim.Pix, nil 
    case *image.NRGBA: 
     return trueim.Pix, nil 
    } 
    return nil, fmt.Errorf("unhandled image format") 
} 

必要があります私はあなたが必要とuint16の値から来るべきところ全くわからないんだけど、おそらくそれは、ピクセルあたりのデータですので、コードがtrueimにスイッチを除いて、これに非常に類似していなければなりませんおそらくimage.RGBA以外のものをチェックしてください。 https://golang.org/pkg/image

関連する問題