這段時(shí)間想研究研究opencv埃叭,于是就跟著李超的OpenCV三大經(jīng)典項(xiàng)目實(shí)戰(zhàn)開始敲代碼。
一開始還是很順利的悉罕,代碼敲的很愉快赤屋,感慨于opencv的強(qiáng)大。寥寥幾行代碼壁袄,就能搞定窗口类早,圖像顯示,真是強(qiáng)大嗜逻。
但是很快我就陷入了困境涩僻。就是實(shí)戰(zhàn)TrackBar的使用。
這節(jié)課展示了trackbar的使用栈顷。是一節(jié)實(shí)戰(zhàn)課程逆日。課程的內(nèi)容不算復(fù)雜,就是構(gòu)建三個(gè)trackbar萄凤,分別代表紅室抽,綠,藍(lán)靡努。通過調(diào)節(jié)這三個(gè)trackbar坪圾,實(shí)時(shí)的改變背景的顏色。
實(shí)際上這個(gè)demo還真的是短小精悍颤难。而且還有一定的趣味性神年。
讓我們敲起代碼。
當(dāng)我按照課程里的示范行嗤,敲好了代碼以后已日,尷尬的事情發(fā)生了。界面上看起來沒什么問題栅屏,但只有是用鼠標(biāo)滑動(dòng)一下trackbar飘千,則全部窗口立刻消失。憑著多年的經(jīng)驗(yàn)栈雳,可以知道护奈,確實(shí)是發(fā)生crash了。
vs的提示實(shí)在是沒有什么啟發(fā)性哥纫,只是說了句 segmentation fault霉旗。
這個(gè)提示實(shí)在是信息量太小,以至于在網(wǎng)上搜索相關(guān)的資料也沒有什么線索。
這可如何是好厌秒。
只能用老辦法了读拆。想了想大概率應(yīng)該是環(huán)境問題吧,那好鸵闪,我們盡量保持環(huán)境和課程的一致檐晕。重新安裝python,重新安裝open-cv模塊蚌讼,重啟電腦辟灰。
遺憾的是折騰了半天也沒有解決問題。
想了想還是信息量太小篡石,segmentation fault實(shí)在是包羅萬象芥喇。既然vs沒有什么啟發(fā)性,我嘗試在命令行里運(yùn)行程序夏志。
這下子終于有些有用的信息了
最起碼能看出來是崩潰在cv2.abi3.so中乃坤,并且是
[CVSlider sliderChanged:]
崩潰苛让。這個(gè)總算是有點(diǎn)堆棧了沟蔑。可以看出就是主線程崩潰了狱杰,是通過系統(tǒng)AppKit瘦材,最終調(diào)用到cv2.abi3.so的,從堆棧中可以看出仿畸,確實(shí)是嘗試觸發(fā)sliderChanged的時(shí)候崩潰了食棕。
看起來,只能研究一下源碼了错沽。
首先下載一下源碼簿晓,在這個(gè)網(wǎng)址:https://pypi.org/project/opencv-python/#files
我們直接下載這里的源碼
這是一個(gè)tar包。這里涉及到源碼的python模塊的安裝千埃,
注意到這里有setup.py憔儿,實(shí)際上只要執(zhí)行
sudo python3 setup.py install
就可以編譯并安裝了。通過sudo命令是為了有權(quán)限可以安裝到系統(tǒng)路徑
讓我們通過崩潰堆棧放可,找到崩潰的位置
其實(shí)就是崩潰在這個(gè)函數(shù)里谒臼。讓我們?cè)黾有﹍og,以便找到崩潰的原因耀里。
經(jīng)過排查蜈缤,發(fā)現(xiàn),原來是value為nullptr冯挎。這樣直接1204行引用*value的時(shí)候底哥,就會(huì)導(dǎo)致崩潰
我們進(jìn)行如下修改
重新編譯安裝,問題解決!