go-opencv/gocv/gocv_core.go
2015-02-17 00:33:46 +08:00

69 lines
1.5 KiB
Go

package gocv
// #cgo CXXFLAGS: -std=c++11
// #cgo darwin pkg-config: opencv
import "C"
import "github.com/gonum/matrix/mat64"
func NewGcvPoint3f32(x, y, z float64) GcvPoint3f32_ {
return NewGcvPoint3f32_(float32(x), float32(y), float32(z))
}
func NewGcvPoint3f64(x, y, z float64) GcvPoint3f64_ {
return NewGcvPoint3f64_(float64(x), float64(y), float64(z))
}
func NewGcvPoint2f32(x, y float64) GcvPoint2f32_ {
return NewGcvPoint2f32_(float32(x), float32(y))
}
func NewGcvPoint2f64(x, y float64) GcvPoint2f64_ {
return NewGcvPoint2f64_(float64(x), float64(y))
}
func NewGcvSize2f32(x, y float64) GcvSize2f32_ {
return NewGcvSize2f32_(float32(x), float32(y))
}
func NewGcvSize2f64(x, y float64) GcvSize2f64_ {
return NewGcvSize2f64_(float64(x), float64(y))
}
// Convert Mat, which defined by SWIG, to *mat64.Dense.
// The reason is the latter is much easier to handle
// in Go.
// GcvMat is assumed to be 2-dimensional matrix.
func MatToMat64(mat Mat) *mat64.Dense {
col := mat.GetCols()
row := mat.GetRows()
data := []float64{}
for i := 0; i < row; i++ {
for j := 0; j < col; j++ {
if fltPtr, ok := mat.GcvAtf64(i, j).(*float64); ok {
data = append(data, *fltPtr)
} else {
panic("Non *float64 passed to MatToMat64")
}
}
}
return mat64.NewDense(row, col, data)
}
// Convert *mat64.Dense to Mat
func ToMat(mat *mat64.Dense) Mat {
row, col := mat.Dims()
rawData := NewGcvFloat64Vector(int64(row * col))
for i := 0; i < row; i++ {
for j := 0; j < col; j++ {
rawData.Set(i*col+j, mat.At(i, j))
}
}
return ToMat_(row, col, rawData)
}