gocv
gocv copied to clipboard
The func WaitKey() crush program
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
- Copy and run code above;
- 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
orenv.cmd
script before trying togo run
orgo build
?no