gocv icon indicating copy to clipboard operation
gocv copied to clipboard

The func WaitKey() crush program

Open gadzira opened this issue 1 year ago • 0 comments

Description

When I trying use trackbars from code below I got crush my program.

// https://blog.matiaspan.dev/posts/box-tracking-with-gocv/
package main

import (
	"[gocv.io/x/gocv](http://gocv.io/x/gocv)"
)

func main() {
	wi := gocv.NewWindow("normal")
	wt := gocv.NewWindow("threshold")
	wt.ResizeWindow(600, 600)
	wt.MoveWindow(0, 0)
	wi.MoveWindow(600, 0)
	wi.ResizeWindow(600, 600)

	lh := wi.CreateTrackbar("Low H", 360/2)
	hh := wi.CreateTrackbar("High H", 255)
	ls := wi.CreateTrackbar("Low S", 255)
	hs := wi.CreateTrackbar("High S", 255)
	lv := wi.CreateTrackbar("Low V", 255)
	hv := wi.CreateTrackbar("High V", 255)

	video, _ := gocv.OpenVideoCapture(0)
	img := gocv.NewMat()

	for {
		video.Read(&img)
		gocv.CvtColor(img, &img, gocv.ColorBGRToHSV)
		thresholded := gocv.NewMat()
		gocv.InRangeWithScalar(img,
			gocv.Scalar{Val1: getPosFloat(lh), Val2: getPosFloat(ls), Val3: getPosFloat(lv)},
			gocv.Scalar{Val1: getPosFloat(hh), Val2: getPosFloat(hs), Val3: getPosFloat(hv)},
			&thresholded)

		wi.IMShow(img)
		wt.IMShow(thresholded)
		if wi.WaitKey(1) == 27 || wt.WaitKey(1) == 27 {
			break
		}
	}
}

func getPosFloat(t *gocv.Trackbar) float64 {
	return float64(t.GetPos())
}

Result:

[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x50038fb]

runtime stack:
runtime.throw({0x40d555a?, 0x8000000000000000?})
        /usr/local/opt/go/libexec/src/runtime/panic.go:1047 +0x5d fp=0x7ffeefbfe7c0 sp=0x7ffeefbfe790 pc=0x4032c1d
runtime.sigpanic()
        /usr/local/opt/go/libexec/src/runtime/signal_unix.go:819 +0x369 fp=0x7ffeefbfe810 sp=0x7ffeefbfe7c0 pc=0x4046de9

goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x4099d40, 0xc000061e58)
        /usr/local/opt/go/libexec/src/runtime/cgocall.go:158 +0x5c fp=0xc000061e30 sp=0xc000061df8 pc=0x400455c
gocv.io/x/gocv._Cfunc_Window_WaitKey(0x1)
        _cgo_gotypes.go:8191 +0x4c fp=0xc000061e58 sp=0xc000061e30 pc=0x409352c
gocv.io/x/gocv.(*Window).WaitKey(...)
        /Users/xxx/go/pkg/mod/gocv.io/x/[email protected]/highgui.go:170
main.main()
        /Users/xxx/go/src/cv_experiment_1/main.go:36 +0x3e5 fp=0xc000061f80 sp=0xc000061e58 pc=0x40955e5
runtime.main()
        /usr/local/opt/go/libexec/src/runtime/proc.go:250 +0x212 fp=0xc000061fe0 sp=0xc000061f80 pc=0x4035432
runtime.goexit()
        /usr/local/opt/go/libexec/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000061fe8 sp=0xc000061fe0 pc=0x405ec61

goroutine 2 [force gc (idle)]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/opt/go/libexec/src/runtime/proc.go:363 +0xd6 fp=0xc00004efb0 sp=0xc00004ef90 pc=0x40357f6
runtime.goparkunlock(...)
        /usr/local/opt/go/libexec/src/runtime/proc.go:369
runtime.forcegchelper()
        /usr/local/opt/go/libexec/src/runtime/proc.go:302 +0xad fp=0xc00004efe0 sp=0xc00004efb0 pc=0x403568d
runtime.goexit()
        /usr/local/opt/go/libexec/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00004efe8 sp=0xc00004efe0 pc=0x405ec61
created by runtime.init.6
        /usr/local/opt/go/libexec/src/runtime/proc.go:290 +0x25

goroutine 3 [GC sweep wait]:
runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?)
        /usr/local/opt/go/libexec/src/runtime/proc.go:363 +0xd6 fp=0xc00004f790 sp=0xc00004f770 pc=0x40357f6
runtime.goparkunlock(...)
        /usr/local/opt/go/libexec/src/runtime/proc.go:369
runtime.bgsweep(0x0?)
        /usr/local/opt/go/libexec/src/runtime/mgcsweep.go:278 +0x8e fp=0xc00004f7c8 sp=0xc00004f790 pc=0x402334e
runtime.gcenable.func1()
        /usr/local/opt/go/libexec/src/runtime/mgc.go:178 +0x26 fp=0xc00004f7e0 sp=0xc00004f7c8 pc=0x4018206
runtime.goexit()
        /usr/local/opt/go/libexec/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00004f7e8 sp=0xc00004f7e0 pc=0x405ec61
created by runtime.gcenable
        /usr/local/opt/go/libexec/src/runtime/mgc.go:178 +0x6b

goroutine 4 [GC scavenge wait]:
runtime.gopark(0xc0000280e0?, 0x40efa40?, 0x1?, 0x0?, 0x0?)
        /usr/local/opt/go/libexec/src/runtime/proc.go:363 +0xd6 fp=0xc00004ff70 sp=0xc00004ff50 pc=0x40357f6
runtime.goparkunlock(...)
        /usr/local/opt/go/libexec/src/runtime/proc.go:369
runtime.(*scavengerState).park(0x4171520)
        /usr/local/opt/go/libexec/src/runtime/mgcscavenge.go:389 +0x53 fp=0xc00004ffa0 sp=0xc00004ff70 pc=0x40213f3
runtime.bgscavenge(0x0?)
        /usr/local/opt/go/libexec/src/runtime/mgcscavenge.go:617 +0x45 fp=0xc00004ffc8 sp=0xc00004ffa0 pc=0x40219c5
runtime.gcenable.func2()
        /usr/local/opt/go/libexec/src/runtime/mgc.go:179 +0x26 fp=0xc00004ffe0 sp=0xc00004ffc8 pc=0x40181a6
runtime.goexit()
        /usr/local/opt/go/libexec/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00004ffe8 sp=0xc00004ffe0 pc=0x405ec61
created by runtime.gcenable
        /usr/local/opt/go/libexec/src/runtime/mgc.go:179 +0xaa

goroutine 5 [finalizer wait]:
runtime.gopark(0x4171920?, 0xc000007860?, 0x0?, 0x0?, 0xc00004e770?)
        /usr/local/opt/go/libexec/src/runtime/proc.go:363 +0xd6 fp=0xc00004e628 sp=0xc00004e608 pc=0x40357f6
runtime.goparkunlock(...)
        /usr/local/opt/go/libexec/src/runtime/proc.go:369
runtime.runfinq()
        /usr/local/opt/go/libexec/src/runtime/mfinal.go:180 +0x10f fp=0xc00004e7e0 sp=0xc00004e628 pc=0x401730f
runtime.goexit()
        /usr/local/opt/go/libexec/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc00004e7e8 sp=0xc00004e7e0 pc=0x405ec61
created by runtime.createfing
        /usr/local/opt/go/libexec/src/runtime/mfinal.go:157 +0x45
exit status 2

Steps to Reproduce

  1. Copy and run code above;
  2. Try move any trackbare to right

Your Environment

  • Operating System and version: macos catalina 10.15.7
  • OpenCV version used: stable 4.6.0 (bottled)
  • How did you install OpenCV? brew install opencv
  • GoCV version used: v0.31.0
  • Go version: 1.19
  • Did you run the env.sh or env.cmd script before trying to go run or go build? no

gadzira avatar Aug 19 '22 19:08 gadzira