@@ -14,61 +14,33 @@ import (
14
14
type DarknetImage struct {
15
15
Width int
16
16
Height int
17
- ans []float32
18
17
image C.image
19
18
}
20
19
21
20
// Close and release resources.
22
21
func (img * DarknetImage ) Close () error {
23
22
C .free_image (img .image )
24
- img .ans = nil
25
23
return nil
26
24
}
27
25
28
- // https://stackoverflow.com/questions/33186783/get-a-pixel-array-from-from-golang-image-image/59747737#59747737
29
- func imgTofloat32 (src image.Image ) []float32 {
26
+ func Image2Float32 (src image.Image ) (* DarknetImage , error ) {
30
27
bounds := src .Bounds ()
31
- width , height := bounds .Max .X , bounds .Max .Y
32
- srcRGBA := image .NewRGBA (src .Bounds ())
33
- draw .Copy (srcRGBA , image.Point {}, src , src .Bounds (), draw .Src , nil )
28
+ srcRGBA := image .NewRGBA (bounds )
29
+ draw .Copy (srcRGBA , image.Point {}, src , bounds , draw .Src , nil )
34
30
35
- red := make ([]float32 , 0 , width * height )
36
- green := make ([]float32 , 0 , width * height )
37
- blue := make ([]float32 , 0 , width * height )
38
- for y := 0 ; y < height ; y ++ {
39
- for x := 0 ; x < width ; x ++ {
40
- idxSource := (y * width + x ) * 4
41
- pix := srcRGBA .Pix [idxSource : idxSource + 4 ]
42
- rpix , gpix , bpix := float32 (pix [0 ])/ 257.0 , float32 (pix [1 ])/ 257.0 , float32 (pix [2 ])/ 257.0
43
- red = append (red , rpix )
44
- green = append (green , gpix )
45
- blue = append (blue , bpix )
46
- }
47
- }
48
- srcRGBA = nil
49
-
50
- ans := make ([]float32 , len (red )+ len (green )+ len (blue ))
51
- copy (ans [:len (red )], red )
52
- copy (ans [len (red ):len (red )+ len (green )], green )
53
- copy (ans [len (red )+ len (green ):], blue )
54
- red = nil
55
- green = nil
56
- blue = nil
57
- return ans
31
+ return ImageRGBA2Float32 (srcRGBA )
58
32
}
59
33
60
34
// Image2Float32 Returns []float32 representation of image.Image
61
- func Image2Float32 (img image.Image ) (* DarknetImage , error ) {
62
- // ans := imgTofloat32(img)
35
+ func ImageRGBA2Float32 (img * image.RGBA ) (* DarknetImage , error ) {
63
36
width := img .Bounds ().Dx ()
64
37
height := img .Bounds ().Dy ()
65
38
imgDarknet := & DarknetImage {
66
39
Width : width ,
67
40
Height : height ,
68
- ans : imgTofloat32 (img ),
69
41
image : C .make_image (C .int (width ), C .int (height ), 3 ),
70
42
}
71
- C .fill_image_f32 (& imgDarknet .image , C .int (width ), C .int (height ), 3 , (* C .float )(unsafe .Pointer (& imgDarknet . ans [0 ])))
43
+ C .to_float_and_fill_image (& imgDarknet .image , C .int (width ), C .int (height ), (* C .uint8_t )(unsafe .Pointer (& img . Pix [0 ])))
72
44
return imgDarknet , nil
73
45
}
74
46
0 commit comments