mirror of
https://github.com/gen2brain/cam2ip.git
synced 2026-01-10 00:28:32 +00:00
Reuse frame
This commit is contained in:
@@ -13,12 +13,16 @@ import (
|
||||
// Camera represents camera.
|
||||
type Camera struct {
|
||||
camera *gocv.VideoCapture
|
||||
frame *gocv.Mat
|
||||
}
|
||||
|
||||
// New returns new Camera for given camera index.
|
||||
func New(index int) (camera *Camera, err error) {
|
||||
camera = &Camera{}
|
||||
|
||||
mat := gocv.NewMat()
|
||||
camera.frame = &mat
|
||||
|
||||
camera.camera, err = gocv.VideoCaptureDevice(index)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("camera: can not open camera %d: %s", index, err.Error())
|
||||
@@ -29,16 +33,13 @@ func New(index int) (camera *Camera, err error) {
|
||||
|
||||
// Read reads next frame from camera and returns image.
|
||||
func (c *Camera) Read() (img image.Image, err error) {
|
||||
mat := gocv.NewMat()
|
||||
defer mat.Close()
|
||||
|
||||
ok := c.camera.Read(mat)
|
||||
ok := c.camera.Read(*c.frame)
|
||||
if !ok {
|
||||
err = fmt.Errorf("camera: can not grab frame")
|
||||
return
|
||||
}
|
||||
|
||||
img, e := mat.ToImage()
|
||||
img, e := c.frame.ToImage()
|
||||
if e != nil {
|
||||
err = fmt.Errorf("camera: %v", e)
|
||||
return
|
||||
@@ -64,6 +65,7 @@ func (c *Camera) Close() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
c.frame.Close()
|
||||
err = c.camera.Close()
|
||||
c.camera = nil
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user