added path from go image to opencv image and back.
This commit is contained in:
parent
5d538b4b5e
commit
d2eca0237c
3 changed files with 18 additions and 10 deletions
|
|
@ -69,6 +69,10 @@ func (img *IplImage) Release() {
|
||||||
C.cvReleaseImage(&img_c)
|
C.cvReleaseImage(&img_c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (img *IplImage) Zero() {
|
||||||
|
C.cvSetZero(unsafe.Pointer(img))
|
||||||
|
}
|
||||||
|
|
||||||
/* Creates a copy of IPL image (widthStep may differ) */
|
/* Creates a copy of IPL image (widthStep may differ) */
|
||||||
func (img *IplImage) Clone() *IplImage {
|
func (img *IplImage) Clone() *IplImage {
|
||||||
p := C.cvCloneImage((*C.IplImage)(img))
|
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. */
|
/* Get2D return a specific element from a 2-dimensional matrix. */
|
||||||
func (img *IplImage) Get2D(x, y int) Scalar {
|
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)
|
return Scalar(ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get3D return a specific element from a 3-dimensional matrix. */
|
/* Get3D return a specific element from a 3-dimensional matrix. */
|
||||||
func (img *IplImage) Get3D(x, y, z int) Scalar {
|
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)
|
return Scalar(ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -139,12 +143,12 @@ func (img *IplImage) Set1D(x int, value Scalar) {
|
||||||
|
|
||||||
/* Set2D sets a particular element in the image */
|
/* Set2D sets a particular element in the image */
|
||||||
func (img *IplImage) Set2D(x, y int, value Scalar) {
|
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 */
|
/* Set3D sets a particular element in the image */
|
||||||
func (img *IplImage) Set3D(x, y, z int, value Scalar) {
|
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.*/
|
/* GetMat returns the matrix header for an image.*/
|
||||||
|
|
@ -217,6 +221,10 @@ func (mat *Mat) Clone() *Mat {
|
||||||
return (*Mat)(mat_new)
|
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
|
Reshape changes shape of the matrix without copying data. A value of `0` means
|
||||||
that channels or rows remain unchanged.
|
that channels or rows remain unchanged.
|
||||||
|
|
|
||||||
|
|
@ -11,22 +11,22 @@ func DecodeImageMem(data []byte) *IplImage {
|
||||||
buf := CreateMatHeader(1, len(data), CV_8U)
|
buf := CreateMatHeader(1, len(data), CV_8U)
|
||||||
buf.SetData(unsafe.Pointer(&data[0]), CV_AUTOSTEP)
|
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. */
|
/* From Image converts a go image.Image to an opencv.IplImage. */
|
||||||
func FromImage(img image.Image) *IplImage {
|
func FromImage(img image.Image) *IplImage {
|
||||||
b := img.Bounds()
|
b := img.Bounds()
|
||||||
model := color.NRGBAModel
|
model := color.RGBAModel
|
||||||
dst := CreateImage(
|
dst := CreateImage(
|
||||||
b.Max.Y-b.Min.Y,
|
|
||||||
b.Max.X-b.Min.X,
|
b.Max.X-b.Min.X,
|
||||||
|
b.Max.Y-b.Min.Y,
|
||||||
IPL_DEPTH_8U, 4)
|
IPL_DEPTH_8U, 4)
|
||||||
|
|
||||||
for y := b.Min.Y; y < b.Max.Y; y++ {
|
for y := b.Min.Y; y < b.Max.Y; y++ {
|
||||||
for x := b.Min.X; x < b.Max.X; x++ {
|
for x := b.Min.X; x < b.Max.X; x++ {
|
||||||
px := img.At(x, y)
|
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))
|
value := NewScalar(float64(c.B), float64(c.G), float64(c.R), float64(c.A))
|
||||||
dst.Set2D(x, y, value)
|
dst.Set2D(x, y, value)
|
||||||
|
|
|
||||||
|
|
@ -399,11 +399,11 @@ func SaveImage(filename string, image *IplImage, params int) int {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* decode image stored in the buffer */
|
/* 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))
|
rv := C.cvDecodeImage((*C.CvMat)(buf), C.int(iscolor))
|
||||||
return (*IplImage)(rv)
|
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))
|
rv := C.cvDecodeImageM((*C.CvMat)(buf), C.int(iscolor))
|
||||||
return (*Mat)(rv)
|
return (*Mat)(rv)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue