对于我们普通凡夫俗子而言,在电子设备或者计算机编程技术方面,大概可以这么说,技术的问题千千万,无语的情况占一半。这个情况可能在Linux系统中很突出。的确,很多时候,除了我们的手残操作外,更多的情况是我们明明一切都作对了,就是没有得到想要的结果。或者说,我们得到了想要的结果,然而我们却不懂为嘛会这样。哈。
这次这个opencv的问题就是这样,奇怪而无语。奇怪是这个问题,本身就是太多人早已验证过的代码。无语的是,机智客自己真的不知道怎么解决的,就那样了。这个很多人都写过的代码就是opencv基本的调用。import载入cv2后用摄像头摄像并显示出来,按q退出。

原本就是简单的代码,原本就是一切风平浪静。因为刚开始运行的时候,这段代码是正常的,cv2正常调用摄像头。于是也没什么疑惑。然而,这次,突然就不能用了。后面的错误提示是:(-215:Assertion
failed) size.width>0 && size.height>0 in function ‘imshow’。代码一目了然,提示也一目了然。神奇的就是,正如我们常说的那千古之谜:每一个词我都认识,连到一起,就不认识了。
关于size.width>0 && size.height>0 in function ‘imshow’的问题,一般的解决方法是,检查这个文件所在的目录,是否有中文。比如类似D:\\脚本\\test.py的路径就不行。然后就是图像文件是否是中文名,图像文件全程。反正说来说去,不要中文就对了。这个不可能,略。
当然这里还有一个路径反斜杠的问题。最好是两个反斜杠,同样不可能。然后就是检查图像文件名是否存在。因为不存在的话,size.height当然就是0了。这个当然也不可能,毕竟这里直接采集的是图像帧,并不是一张图。既然没有有效图像,那就是OpenCV的问题?用pip install -U opencv-python终端命令重装或者检查一下pip下面安装的库文件。
库文件正确,没有不适配的情况。这个依然排除了不可能,略。库文件没问题,那么函数是否有异议呢?虽然以前测试的都正常,但架不住有特别情况。网上还有人指出这里的cv2.imread函数可以换成cv_imread。同样不行。
试来试去,网上说的几种解决方法都不行。于是最终我开始怀疑摄像头。该不会是硬件这玩意儿坏了吧。问题是也没用多久啊。于是重新插拔了一下USB口。把摄像头重新试了试。依然没用。没辙了。逐行代码检查就是一个黑框。摄像头大抵是没问题的。
一时间,我觉得人生充满了挫败感,禁不住惆怅满怀顾影自怜独自神伤。于是乎,上帝聆听了我的孤独,垂怜了我的忧伤,及时挽救了我的代码。当然机智客这是闲扯,毕竟我也不知道怎么回事,然后,也就是在我完全没动的情况下,代码居然又起死回生,安好如初,像没事人一样,好了。你说无语不。
后来执行的时候还有一个小插曲。执行代码出现module 'cv2' has no attribute 'DestoryAllWindows'的问题,也就是cv2没有这个属性,瞧,又是大无语事件。不过没啥大碍,能用就行。添加这个代码cv2.startWindowThread()就解决了。