Add Mat profile wrapper in other areas of the library.

This commit is contained in:
Douglas Dawson
2018-11-18 15:22:14 -05:00
parent 71a026458f
commit 94247f8604
7 changed files with 35 additions and 11 deletions

6
dnn.go
View File

@@ -130,7 +130,7 @@ func (net *Net) Forward(outputName string) Mat {
cName := C.CString(outputName)
defer C.free(unsafe.Pointer(cName))
return Mat{p: C.Net_Forward((C.Net)(net.p), cName)}
return newMat(C.Net_Forward((C.Net)(net.p), cName))
}
// ForwardLayers forward pass to compute outputs of layers listed in outBlobNames.
@@ -229,7 +229,7 @@ func BlobFromImage(img Mat, scaleFactor float64, size image.Point, mean Scalar,
val4: C.double(mean.Val4),
}
return Mat{p: C.Net_BlobFromImage(img.p, C.double(scaleFactor), sz, sMean, C.bool(swapRB), C.bool(crop))}
return newMat(C.Net_BlobFromImage(img.p, C.double(scaleFactor), sz, sMean, C.bool(swapRB), C.bool(crop)))
}
// GetBlobChannel extracts a single (2d)channel from a 4 dimensional blob structure
@@ -237,7 +237,7 @@ func BlobFromImage(img Mat, scaleFactor float64, size image.Point, mean Scalar,
// a bones structure from pose detection, or a color plane from Colorization)
//
func GetBlobChannel(blob Mat, imgidx int, chnidx int) Mat {
return Mat{p: C.Net_GetBlobChannel(blob.p, C.int(imgidx), C.int(chnidx))}
return newMat(C.Net_GetBlobChannel(blob.p, C.int(imgidx), C.int(chnidx)))
}
// GetBlobSize retrieves the 4 dimensional size information in (N,C,H,W) order

View File

@@ -136,7 +136,7 @@ func IMRead(name string, flags IMReadFlag) Mat {
cName := C.CString(name)
defer C.free(unsafe.Pointer(cName))
return Mat{p: C.Image_IMRead(cName, C.int(flags))}
return newMat(C.Image_IMRead(cName, C.int(flags)))
}
// IMWrite writes a Mat to an image file.
@@ -244,5 +244,5 @@ func IMDecode(buf []byte, flags IMReadFlag) (Mat, error) {
if err != nil {
return Mat{}, err
}
return Mat{p: C.Image_IMDecode(*data, C.int(flags))}, nil
return newMat(C.Image_IMDecode(*data, C.int(flags))), nil
}

View File

@@ -15,6 +15,7 @@ import (
func TestIMRead(t *testing.T) {
img := IMRead("images/face-detect.jpg", IMReadColor)
defer img.Close()
if img.Empty() {
t.Error("Invalid Mat in IMRead")
}
@@ -25,6 +26,7 @@ func TestIMWrite(t *testing.T) {
tmpfn := filepath.Join(dir, "test.jpg")
img := IMRead("images/face-detect.jpg", IMReadColor)
defer img.Close()
if img.Empty() {
t.Error("Invalid read of Mat in IMWrite test")
}
@@ -40,6 +42,7 @@ func TestIMWriteWithParams(t *testing.T) {
tmpfn := filepath.Join(dir, "test.jpg")
img := IMRead("images/face-detect.jpg", IMReadColor)
defer img.Close()
if img.Empty() {
t.Error("Invalid read of Mat in IMWrite test")
}
@@ -52,6 +55,7 @@ func TestIMWriteWithParams(t *testing.T) {
func TestIMEncode(t *testing.T) {
img := IMRead("images/face-detect.jpg", IMReadColor)
defer img.Close()
if img.Empty() {
t.Error("Invalid Mat in IMEncode test")
}
@@ -94,6 +98,7 @@ func ExampleIMEncodeWithParams() {
func TestIMEncodeWithParams(t *testing.T) {
img := IMRead("images/face-detect.jpg", IMReadColor)
defer img.Close()
if img.Empty() {
t.Error("Invalid Mat in IMEncode test")
}
@@ -132,6 +137,7 @@ func TestIMDecode(t *testing.T) {
if dec.Empty() {
t.Error("Invalid Mat in IMDecode")
}
dec.Close()
dec, err = IMDecode([]byte{}, IMReadColor)
if err == nil {

View File

@@ -491,7 +491,7 @@ func GetStructuringElement(shape MorphShape, ksize image.Point) Mat {
height: C.int(ksize.Y),
}
return Mat{p: C.GetStructuringElement(C.int(shape), sz)}
return newMat(C.GetStructuringElement(C.int(shape), sz))
}
// MorphType type of morphological operation.
@@ -1076,7 +1076,7 @@ func GetRotationMatrix2D(center image.Point, angle, scale float64) Mat {
x: C.int(center.X),
y: C.int(center.Y),
}
return Mat{p: C.GetRotationMatrix2D(pc, C.double(angle), C.double(scale))}
return newMat(C.GetRotationMatrix2D(pc, C.double(angle), C.double(scale)))
}
// WarpAffine applies an affine transformation to an image. For more parameters please check WarpAffineWithParams
@@ -1173,7 +1173,7 @@ func ApplyCustomColorMap(src Mat, dst *Mat, customColormap Mat) {
func GetPerspectiveTransform(src, dst []image.Point) Mat {
srcPoints := toCPoints(src)
dstPoints := toCPoints(dst)
return Mat{p: C.GetPerspectiveTransform(srcPoints, dstPoints)}
return newMat(C.GetPerspectiveTransform(srcPoints, dstPoints))
}
// DrawContours draws contours outlines or filled contours.

View File

@@ -197,6 +197,7 @@ func TestDilate(t *testing.T) {
defer dest.Close()
kernel := GetStructuringElement(MorphRect, image.Pt(1, 1))
defer kernel.Close()
Dilate(img, &dest, kernel)
if dest.Empty() || img.Rows() != dest.Rows() || img.Cols() != dest.Cols() {
@@ -337,6 +338,7 @@ func TestErode(t *testing.T) {
defer dest.Close()
kernel := GetStructuringElement(MorphRect, image.Pt(1, 1))
defer kernel.Close()
Erode(img, &dest, kernel)
if dest.Empty() || img.Rows() != dest.Rows() || img.Cols() != dest.Cols() {
@@ -355,6 +357,7 @@ func TestMorphologyEx(t *testing.T) {
defer dest.Close()
kernel := GetStructuringElement(MorphRect, image.Pt(1, 1))
defer kernel.Close()
MorphologyEx(img, &dest, MorphOpen, kernel)
if dest.Empty() || img.Rows() != dest.Rows() || img.Cols() != dest.Cols() {
@@ -817,6 +820,7 @@ func TestGetRotationMatrix2D(t *testing.T) {
}
}
}
got.Close()
})
}
}
@@ -825,6 +829,7 @@ func TestWarpAffine(t *testing.T) {
src := NewMatWithSize(256, 256, MatTypeCV8UC1)
defer src.Close()
rot := GetRotationMatrix2D(image.Point{0, 0}, 1.0, 1.0)
defer rot.Close()
dst := src.Clone()
defer dst.Close()
@@ -839,6 +844,7 @@ func TestWarpAffineGocvLogo(t *testing.T) {
src := IMRead("images/gocvlogo.jpg", IMReadUnchanged)
defer src.Close()
rot := GetRotationMatrix2D(image.Point{0, 0}, 1.0, 1.0)
defer rot.Close()
dst := src.Clone()
defer dst.Close()
WarpAffine(src, &dst, rot, image.Point{343, 400})
@@ -853,6 +859,7 @@ func TestWarpAffineWithParams(t *testing.T) {
src := NewMatWithSize(256, 256, MatTypeCV8UC1)
defer src.Close()
rot := GetRotationMatrix2D(image.Point{0, 0}, 1.0, 1.0)
defer rot.Close()
dst := src.Clone()
defer dst.Close()
@@ -867,6 +874,7 @@ func TestWarpAffineWithParamsGocvLogo(t *testing.T) {
src := IMRead("images/gocvlogo.jpg", IMReadUnchanged)
defer src.Close()
rot := GetRotationMatrix2D(image.Point{0, 0}, 1.0, 1.0)
defer rot.Close()
dst := src.Clone()
defer dst.Close()
WarpAffineWithParams(src, &dst, rot, image.Point{343, 400}, InterpolationLinear, BorderConstant, color.RGBA{0, 0, 0, 0})
@@ -900,6 +908,7 @@ func TestApplyColorMap(t *testing.T) {
{name: "COLORMAP_PARULA", args: args{colormapType: ColormapParula, want: 111483.33555738274}},
}
src := IMRead("images/gocvlogo.jpg", IMReadGrayScale)
defer src.Close()
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
@@ -944,6 +953,7 @@ func TestGetPerspectiveTransform(t *testing.T) {
}
m := GetPerspectiveTransform(src, dst)
defer m.Close()
if m.Cols() != 3 {
t.Errorf("TestWarpPerspective(): unexpected cols = %v, want = %v", m.Cols(), 3)
@@ -973,6 +983,7 @@ func TestWarpPerspective(t *testing.T) {
image.Pt(0, 10),
}
m := GetPerspectiveTransform(s, d)
defer m.Close()
dst := NewMat()
defer dst.Close()
@@ -1076,6 +1087,7 @@ func TestFilter2D(t *testing.T) {
defer dst.Close()
kernel := GetStructuringElement(MorphRect, image.Pt(1, 1))
defer kernel.Close()
Filter2D(src, &dst, -1, kernel, image.Pt(-1, -1), 0, BorderDefault)
@@ -1092,7 +1104,9 @@ func TestSepFilter2D(t *testing.T) {
defer dst.Close()
kernelX := GetStructuringElement(MorphRect, image.Pt(1, 1))
defer kernelX.Close()
kernelY := GetStructuringElement(MorphRect, image.Pt(1, 1))
defer kernelY.Close()
SepFilter2D(src, &dst, -1, kernelX, kernelY, image.Pt(-1, -1), 0, BorderDefault)

View File

@@ -146,7 +146,7 @@ func (h *HOGDescriptor) DetectMultiScaleWithParams(img Mat, hitThresh float64,
// https://docs.opencv.org/master/d5/d33/structcv_1_1HOGDescriptor.html#a660e5cd036fd5ddf0f5767b352acd948
//
func HOGDefaultPeopleDetector() Mat {
return Mat{p: C.HOG_GetDefaultPeopleDetector()}
return newMat(C.HOG_GetDefaultPeopleDetector())
}
// SetSVMDetector sets the data for the HOGDescriptor.

View File

@@ -54,7 +54,9 @@ func TestHOGDescriptor(t *testing.T) {
hog := NewHOGDescriptor()
defer hog.Close()
hog.SetSVMDetector(HOGDefaultPeopleDetector())
d := HOGDefaultPeopleDetector()
defer d.Close()
hog.SetSVMDetector(d)
rects := hog.DetectMultiScale(img)
if len(rects) != 1 {
@@ -73,7 +75,9 @@ func TestHOGDescriptorWithParams(t *testing.T) {
hog := NewHOGDescriptor()
defer hog.Close()
hog.SetSVMDetector(HOGDefaultPeopleDetector())
d := HOGDefaultPeopleDetector()
defer d.Close()
hog.SetSVMDetector(d)
rects := hog.DetectMultiScaleWithParams(img, 0, image.Pt(0, 0), image.Pt(0, 0),
1.05, 2.0, false)