美文网首页
opencv中trackbar崩溃

opencv中trackbar崩溃

作者: bigonelby | 来源:发表于2022-12-22 18:36 被阅读0次

这段时间想研究研究opencv,于是就跟着李超的OpenCV三大经典项目实战开始敲代码。
一开始还是很顺利的,代码敲的很愉快,感慨于opencv的强大。寥寥几行代码,就能搞定窗口,图像显示,真是强大。

但是很快我就陷入了困境。就是实战TrackBar的使用。
这节课展示了trackbar的使用。是一节实战课程。课程的内容不算复杂,就是构建三个trackbar,分别代表红,绿,蓝。通过调节这三个trackbar,实时的改变背景的颜色。

1E1A6F08-7812-40D3-A139-634FB9115A5A.png

实际上这个demo还真的是短小精悍。而且还有一定的趣味性。
让我们敲起代码。

当我按照课程里的示范,敲好了代码以后,尴尬的事情发生了。界面上看起来没什么问题,但只有是用鼠标滑动一下trackbar,则全部窗口立刻消失。凭着多年的经验,可以知道,确实是发生crash了。

F86A0B70-5F42-4885-BB4D-0FC37A88C007.png

vs的提示实在是没有什么启发性,只是说了句 segmentation fault。
这个提示实在是信息量太小,以至于在网上搜索相关的资料也没有什么线索。

这可如何是好。
只能用老办法了。想了想大概率应该是环境问题吧,那好,我们尽量保持环境和课程的一致。重新安装python,重新安装open-cv模块,重启电脑。
遗憾的是折腾了半天也没有解决问题。

想了想还是信息量太小,segmentation fault实在是包罗万象。既然vs没有什么启发性,我尝试在命令行里运行程序。
这下子终于有些有用的信息了

8D0468CA-E871-47B6-BCDA-736465BAE086.png

最起码能看出来是崩溃在cv2.abi3.so中,并且是

[CVSlider sliderChanged:]

崩溃。这个总算是有点堆栈了。可以看出就是主线程崩溃了,是通过系统AppKit,最终调用到cv2.abi3.so的,从堆栈中可以看出,确实是尝试触发sliderChanged的时候崩溃了。

看起来,只能研究一下源码了。

首先下载一下源码,在这个网址:https://pypi.org/project/opencv-python/#files

我们直接下载这里的源码

B5099298-1B37-46A9-BEB0-038FDB6DB2D9.png

这是一个tar包。这里涉及到源码的python模块的安装,

6E484297-FB9F-409B-B30B-0B20EBBDEA96.png

注意到这里有setup.py,实际上只要执行

sudo python3 setup.py install

就可以编译并安装了。通过sudo命令是为了有权限可以安装到系统路径
让我们通过崩溃堆栈,找到崩溃的位置

2D3D6F80-A364-4E67-AAB5-244F2E03EAA3.png

其实就是崩溃在这个函数里。让我们增加些log,以便找到崩溃的原因。
经过排查,发现,原来是value为nullptr。这样直接1204行引用*value的时候,就会导致崩溃

我们进行如下修改

D7F42562-070E-4F56-9923-3A5FD52A0F87.png

重新编译安装,问题解决!

相关文章

网友评论

      本文标题:opencv中trackbar崩溃

      本文链接:https://www.haomeiwen.com/subject/qnovqdtx.html