diff --git a/opencv/cxcore.go b/opencv/cxcore.go index ca81a59..0e5c622 100644 --- a/opencv/cxcore.go +++ b/opencv/cxcore.go @@ -69,6 +69,10 @@ func (img *IplImage) Release() { C.cvReleaseImage(&img_c) } +func (img *IplImage) Zero() { + C.cvSetZero(unsafe.Pointer(img)) +} + /* Creates a copy of IPL image (widthStep may differ) */ func (img *IplImage) Clone() *IplImage { p := C.cvCloneImage((*C.IplImage)(img)) @@ -122,13 +126,13 @@ func (img *IplImage) Get1D(x int) Scalar { /* Get2D return a specific element from a 2-dimensional matrix. */ func (img *IplImage) Get2D(x, y int) Scalar { - ret := C.cvGet2D(unsafe.Pointer(img), C.int(x), C.int(y)) + ret := C.cvGet2D(unsafe.Pointer(img), C.int(y), C.int(x)) return Scalar(ret) } /* Get3D return a specific element from a 3-dimensional matrix. */ func (img *IplImage) Get3D(x, y, z int) Scalar { - ret := C.cvGet3D(unsafe.Pointer(img), C.int(x), C.int(y), C.int(z)) + ret := C.cvGet3D(unsafe.Pointer(img), C.int(z), C.int(y), C.int(x)) return Scalar(ret) } @@ -139,12 +143,12 @@ func (img *IplImage) Set1D(x int, value Scalar) { /* Set2D sets a particular element in the image */ func (img *IplImage) Set2D(x, y int, value Scalar) { - C.cvSet2D(unsafe.Pointer(img), C.int(x), C.int(y), (C.CvScalar)(value)) + C.cvSet2D(unsafe.Pointer(img), C.int(y), C.int(x), (C.CvScalar)(value)) } /* Set3D sets a particular element in the image */ func (img *IplImage) Set3D(x, y, z int, value Scalar) { - C.cvSet3D(unsafe.Pointer(img), C.int(x), C.int(y), C.int(z), (C.CvScalar)(value)) + C.cvSet3D(unsafe.Pointer(img), C.int(z), C.int(y), C.int(x), (C.CvScalar)(value)) } /* GetMat returns the matrix header for an image.*/ @@ -217,6 +221,10 @@ func (mat *Mat) Clone() *Mat { return (*Mat)(mat_new) } +func (mat *Mat) Zero() { + C.cvSetZero(unsafe.Pointer(mat)) +} + /* Reshape changes shape of the matrix without copying data. A value of `0` means that channels or rows remain unchanged. diff --git a/opencv/goimage.go b/opencv/goimage.go index 9e590a6..15804db 100644 --- a/opencv/goimage.go +++ b/opencv/goimage.go @@ -11,22 +11,22 @@ func DecodeImageMem(data []byte) *IplImage { buf := CreateMatHeader(1, len(data), CV_8U) buf.SetData(unsafe.Pointer(&data[0]), CV_AUTOSTEP) - return DecodeImage(buf, CV_LOAD_IMAGE_UNCHANGED) + return DecodeImage(unsafe.Pointer(buf), CV_LOAD_IMAGE_UNCHANGED) } /* From Image converts a go image.Image to an opencv.IplImage. */ func FromImage(img image.Image) *IplImage { b := img.Bounds() - model := color.NRGBAModel + model := color.RGBAModel dst := CreateImage( - b.Max.Y-b.Min.Y, b.Max.X-b.Min.X, + b.Max.Y-b.Min.Y, IPL_DEPTH_8U, 4) for y := b.Min.Y; y < b.Max.Y; y++ { for x := b.Min.X; x < b.Max.X; x++ { px := img.At(x, y) - c := model.Convert(px).(color.NRGBA) + c := model.Convert(px).(color.RGBA) value := NewScalar(float64(c.B), float64(c.G), float64(c.R), float64(c.A)) dst.Set2D(x, y, value) diff --git a/opencv/highgui.go b/opencv/highgui.go index 8583b59..e2a1490 100644 --- a/opencv/highgui.go +++ b/opencv/highgui.go @@ -399,11 +399,11 @@ func SaveImage(filename string, image *IplImage, params int) int { } /* decode image stored in the buffer */ -func DecodeImage(buf *Mat, iscolor int) *IplImage { +func DecodeImage(buf unsafe.Pointer, iscolor int) *IplImage { rv := C.cvDecodeImage((*C.CvMat)(buf), C.int(iscolor)) return (*IplImage)(rv) } -func DecodeImageM(buf *Mat, iscolor int) *Mat { +func DecodeImageM(buf unsafe.Pointer, iscolor int) *Mat { rv := C.cvDecodeImageM((*C.CvMat)(buf), C.int(iscolor)) return (*Mat)(rv) }