From cb163dfd639346a9c762315de5d5110480d608cb Mon Sep 17 00:00:00 2001 From: deadprogram Date: Wed, 27 Sep 2017 10:53:11 +0200 Subject: [PATCH] Use Close() function for cleaning, thanks @maruel for the suggestion Signed-off-by: deadprogram --- core.cpp | 12 ++++++------ core.go | 8 ++++---- core.h | 4 ++-- examples/capture.go | 5 +++-- examples/capwindow.go | 7 ++++--- examples/facedetect.go | 7 +++++-- examples/pvl_facedetect.go | 7 ++++--- examples/saveimage.go | 4 ++-- examples/savevideo.go | 6 +++--- examples/window.go | 2 -- highgui.cpp | 2 +- highgui.go | 6 +++--- highgui.h | 2 +- objdetect.cpp | 2 +- objdetect.go | 12 ++++++------ objdetect.h | 2 +- videoio.cpp | 4 ++-- videoio.go | 12 ++++++------ videoio.h | 4 ++-- 19 files changed, 56 insertions(+), 52 deletions(-) diff --git a/core.cpp b/core.cpp index 26f4c36c..8e7d30b3 100644 --- a/core.cpp +++ b/core.cpp @@ -6,8 +6,8 @@ Mat Mat_New() { return new cv::Mat(); } -// Mat_Delete deletes an existing Mat -void Mat_Delete(Mat m) { +// Mat_Close deletes an existing Mat +void Mat_Close(Mat m) { delete m; } @@ -16,6 +16,10 @@ int Mat_Empty(Mat m) { return m->empty(); } +void Rects_Close(struct Rects rs) { + delete rs.rects; +} + void DrawRectsToImage(Mat img, struct Rects rects) { for (int i = 0; i < rects.length; ++i) { Rect r = rects.rects[i]; @@ -33,7 +37,3 @@ struct ByteArray toByteArray(const char* buf, int len) { memcpy(ret.data, buf, len); return ret; } - -void Rects_Delete(struct Rects rs) { - delete rs.rects; -} diff --git a/core.go b/core.go index 6d048777..9bb0ee53 100644 --- a/core.go +++ b/core.go @@ -28,13 +28,13 @@ func NewMat() Mat { return Mat{p: C.Mat_New()} } -// Delete object. -func (m *Mat) Delete() { - C.Mat_Delete(m.p) +// Close the Mat object. +func (m *Mat) Close() { + C.Mat_Close(m.p) m.p = nil } -// Delete object. +// Ptr returns the Mat's underlying object pointer. func (m *Mat) Ptr() C.Mat { return m.p } diff --git a/core.h b/core.h index fddccdf7..5b5238bd 100644 --- a/core.h +++ b/core.h @@ -45,11 +45,11 @@ extern "C" { struct ByteArray toByteArray(const char* buf, int len); void ByteArray_Release(struct ByteArray buf); - void Rects_Delete(struct Rects rs); + void Rects_Close(struct Rects rs); void DrawRectsToImage(Mat img, struct Rects rects); Mat Mat_New(); - void Mat_Delete(Mat m); + void Mat_Close(Mat m); int Mat_Empty(Mat m); #ifdef __cplusplus diff --git a/examples/capture.go b/examples/capture.go index 3df6a884..6c829007 100644 --- a/examples/capture.go +++ b/examples/capture.go @@ -19,7 +19,7 @@ import ( func main() { deviceID := 0 webcam := opencv3.NewVideoCapture() - defer webcam.Delete() + defer webcam.Close() if ok := webcam.OpenDevice(int(deviceID)); !ok { fmt.Printf("error opening device: %v\n", deviceID) @@ -27,7 +27,8 @@ func main() { // streaming, capture from webcam buf := opencv3.NewMat() - defer buf.Delete() + defer buf.Close() + fmt.Printf("start reading camera device: %v\n", deviceID) for { if ok := webcam.Read(buf); !ok { diff --git a/examples/capwindow.go b/examples/capwindow.go index 48582f77..944e5aa8 100644 --- a/examples/capwindow.go +++ b/examples/capwindow.go @@ -20,7 +20,7 @@ import ( func main() { deviceID := 0 webcam := opencv3.NewVideoCapture() - defer webcam.Delete() + defer webcam.Close() if ok := webcam.OpenDevice(int(deviceID)); !ok { fmt.Printf("error opening device: %v\n", deviceID) @@ -28,9 +28,10 @@ func main() { } window := opencv3.NewWindow("Capture") - + defer window.Close() + img := opencv3.NewMat() - defer img.Delete() + defer img.Close() fmt.Printf("start reading camera device: %v\n", deviceID) for { diff --git a/examples/facedetect.go b/examples/facedetect.go index 5accc99c..5609fbbf 100644 --- a/examples/facedetect.go +++ b/examples/facedetect.go @@ -31,7 +31,7 @@ func main() { xmlFile := os.Args[2] webcam := opencv3.NewVideoCapture() - defer webcam.Delete() + defer webcam.Close() if ok := webcam.OpenDevice(deviceID); !ok { fmt.Printf("error opening device: %v\n", deviceID) @@ -39,11 +39,14 @@ func main() { } window := opencv3.NewWindow("Capture") + defer window.Close() img := opencv3.NewMat() - defer img.Delete() + defer img.Close() classifier := opencv3.NewCascadeClassifier() + defer classifier.Close() + classifier.Load(xmlFile) fmt.Printf("start reading camera device: %v\n", deviceID) diff --git a/examples/pvl_facedetect.go b/examples/pvl_facedetect.go index fb6aeec0..2317d932 100644 --- a/examples/pvl_facedetect.go +++ b/examples/pvl_facedetect.go @@ -31,7 +31,7 @@ func main() { deviceID, _ := strconv.Atoi(os.Args[1]) webcam := opencv3.NewVideoCapture() - defer webcam.Delete() + defer webcam.Close() if ok := webcam.OpenDevice(deviceID); !ok { fmt.Printf("error opening device: %v\n", deviceID) @@ -39,9 +39,10 @@ func main() { } window := opencv3.NewWindow("Capture") - + defer window.Close() + img := opencv3.NewMat() - defer img.Delete() + defer img.Close() fd := pvl.NewFaceDetector() defer fd.Close() diff --git a/examples/saveimage.go b/examples/saveimage.go index 0072707c..c80662ed 100644 --- a/examples/saveimage.go +++ b/examples/saveimage.go @@ -31,14 +31,14 @@ func main() { saveFile := os.Args[2] webcam := opencv3.NewVideoCapture() - defer webcam.Delete() + defer webcam.Close() if ok := webcam.OpenDevice(deviceID); !ok { fmt.Printf("error opening device: %v\n", deviceID) } img := opencv3.NewMat() - defer img.Delete() + defer img.Close() if ok := webcam.Read(img); !ok { fmt.Printf("cannot read device %d\n", deviceID) diff --git a/examples/savevideo.go b/examples/savevideo.go index e7cde8c0..fb63e308 100644 --- a/examples/savevideo.go +++ b/examples/savevideo.go @@ -31,17 +31,17 @@ func main() { saveFile := os.Args[2] webcam := opencv3.NewVideoCapture() - defer webcam.Delete() + defer webcam.Close() writer := opencv3.NewVideoWriter() - defer writer.Delete() + defer writer.Close() if ok := webcam.OpenDevice(deviceID); !ok { fmt.Printf("error opening device: %v\n", deviceID) } img := opencv3.NewMat() - defer img.Delete() + defer img.Close() if ok := webcam.Read(img); !ok { fmt.Printf("cannot read device %d\n", deviceID) diff --git a/examples/window.go b/examples/window.go index df586e07..08fe839c 100644 --- a/examples/window.go +++ b/examples/window.go @@ -13,7 +13,6 @@ package main import ( "os" - "time" opencv3 ".." ) @@ -26,6 +25,5 @@ func main() { for { window.IMShow(img) opencv3.WaitKey(1) - time.Sleep(100 * time.Microsecond) } } diff --git a/highgui.cpp b/highgui.cpp index 6a9e59f8..d683e0c6 100644 --- a/highgui.cpp +++ b/highgui.cpp @@ -5,7 +5,7 @@ void Window_New(const char* winname, int flags) { cv::namedWindow(winname, flags); } -void Window_Delete(const char* winname) { +void Window_Close(const char* winname) { cv::destroyWindow(winname); } diff --git a/highgui.go b/highgui.go index 3576e1bd..b0e4d88e 100644 --- a/highgui.go +++ b/highgui.go @@ -24,12 +24,12 @@ func NewWindow(name string) *Window { return &Window{name: name} } -// Delete a specific Window -func (w *Window) Delete() { +// Close deletes a specific Window +func (w *Window) Close() { cName := C.CString(w.name) defer C.free(unsafe.Pointer(cName)) - C.Window_Delete(cName) + C.Window_Close(cName) } // IMShow takes an image Mat and displays it in the Window diff --git a/highgui.h b/highgui.h index cbf221c0..26eecad1 100644 --- a/highgui.h +++ b/highgui.h @@ -10,7 +10,7 @@ extern "C" { // Window void Window_New(const char* winname, int flags); -void Window_Delete(const char* winname); +void Window_Close(const char* winname); void Window_IMShow(const char* winname, Mat mat); int Window_WaitKey(int); diff --git a/objdetect.cpp b/objdetect.cpp index 3eb959e2..8197f584 100644 --- a/objdetect.cpp +++ b/objdetect.cpp @@ -5,7 +5,7 @@ CascadeClassifier CascadeClassifier_New() { return new cv::CascadeClassifier(); } -void CascadeClassifier_Delete(CascadeClassifier cs) { +void CascadeClassifier_Close(CascadeClassifier cs) { delete cs; } diff --git a/objdetect.go b/objdetect.go index 17be0283..33c606fb 100644 --- a/objdetect.go +++ b/objdetect.go @@ -20,9 +20,9 @@ func NewCascadeClassifier() CascadeClassifier { return CascadeClassifier{p: C.CascadeClassifier_New()} } -// Delete CascadeClassifier's pointer. -func (c *CascadeClassifier) Delete() { - C.CascadeClassifier_Delete(c.p) +// Close deletes the CascadeClassifier's pointer. +func (c *CascadeClassifier) Close() { + C.CascadeClassifier_Close(c.p) c.p = nil } @@ -37,7 +37,7 @@ func (c *CascadeClassifier) Load(name string) bool { // multi results addressed with rectangle. func (c *CascadeClassifier) DetectMultiScale(img Mat) []Rect { ret := C.CascadeClassifier_DetectMultiScale(c.p, img.p) - defer C.Rects_Delete(ret) + defer C.Rects_Close(ret) cArray := ret.rects length := int(ret.length) @@ -46,10 +46,10 @@ func (c *CascadeClassifier) DetectMultiScale(img Mat) []Rect { Len: length, Cap: length, } - goSlice := *(*[]C.Rect)(unsafe.Pointer(&hdr)) + s := *(*[]C.Rect)(unsafe.Pointer(&hdr)) rects := make([]Rect, length) - for i, r := range goSlice { + for i, r := range s { rects[i] = Rect{ X: int(r.x), Y: int(r.y), diff --git a/objdetect.h b/objdetect.h index 31738f9d..6073d3e0 100644 --- a/objdetect.h +++ b/objdetect.h @@ -16,7 +16,7 @@ typedef void* CascadeClassifier; // CascadeClassifier CascadeClassifier CascadeClassifier_New(); -void CascadeClassifier_Delete(CascadeClassifier cs); +void CascadeClassifier_Close(CascadeClassifier cs); int CascadeClassifier_Load(CascadeClassifier cs, const char* name); struct Rects CascadeClassifier_DetectMultiScale(CascadeClassifier cs, Mat img); diff --git a/videoio.cpp b/videoio.cpp index c585835e..ae8595e7 100644 --- a/videoio.cpp +++ b/videoio.cpp @@ -5,7 +5,7 @@ VideoCapture VideoCapture_New() { return new cv::VideoCapture(); } -void VideoCapture_Delete(VideoCapture v) { +void VideoCapture_Close(VideoCapture v) { delete v; } @@ -44,7 +44,7 @@ VideoWriter VideoWriter_New() { return new cv::VideoWriter(); } -void VideoWriter_Delete(VideoWriter vw) { +void VideoWriter_Close(VideoWriter vw) { delete vw; } diff --git a/videoio.go b/videoio.go index 6c60d64d..ac3a982b 100644 --- a/videoio.go +++ b/videoio.go @@ -20,9 +20,9 @@ func NewVideoCapture() VideoCapture { return VideoCapture{p: C.VideoCapture_New()} } -// Delete object. -func (v *VideoCapture) Delete() { - C.VideoCapture_Delete(v.p) +// Close VideoCapture object. +func (v *VideoCapture) Close() { + C.VideoCapture_Close(v.p) v.p = nil } @@ -76,9 +76,9 @@ func NewVideoWriter() VideoWriter { return VideoWriter{p: C.VideoWriter_New()} } -// Delete object. -func (vw *VideoWriter) Delete() { - C.VideoWriter_Delete(vw.p) +// Close VideoWriter object. +func (vw *VideoWriter) Close() { + C.VideoWriter_Close(vw.p) vw.p = nil } diff --git a/videoio.h b/videoio.h index be28293e..0d93f0f9 100644 --- a/videoio.h +++ b/videoio.h @@ -18,7 +18,7 @@ typedef void* VideoWriter; // VideoCapture VideoCapture VideoCapture_New(); -void VideoCapture_Delete(VideoCapture v); +void VideoCapture_Close(VideoCapture v); int VideoCapture_Open(VideoCapture v, const char* uri); int VideoCapture_OpenDevice(VideoCapture v, int device); void VideoCapture_Release(VideoCapture v); @@ -29,7 +29,7 @@ void VideoCapture_Grab(VideoCapture v, int skip); // VideoWriter VideoWriter VideoWriter_New(); -void VideoWriter_Delete(VideoWriter vw); +void VideoWriter_Close(VideoWriter vw); void VideoWriter_Open(VideoWriter vw, const char* name, double fps, int width, int height); void VideoWriter_OpenWithMat(VideoWriter vw, const char* name, double fps,