社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用OpenCV-Python做项目遇到三个让我崩溃的基础问题!

OpenCV学堂 • 4 年前 • 662 次点击  

点击上方蓝字关注我们

微信公众号:OpenCV学堂

关注获取更多计算机视觉与深度学习知识

引言

最近半年了一直在用OpenCV-Python + PyQT做开发,说实话这个是我第一次用这个来开发一个项目,其中遇到的各种问题我都努力克服了,但是其中有几个Python的基础语法问题,我平时没有注意到的,结果是坑了我半天,这次斗胆共享出来,一个是记录避免自己以后再犯同类错误,另外一个是给有需要的人避免犯跟我相似的错误。

01

问题一

Python中的元组是不可修改的,说实话之前我真的没有注意过,直到我想修改一些东西的时候,我才发现,然后就掉坑了,PyQT应用直接死机了,没有任何反应,原因居然是我定义了元组然后赋值导致的。坑死了,被自己蠢死了。请看下面的代码:

第一个定义的变量方式元组,不可修改的;第二个定义变量方式数组,可以赋值修改!

02

问题二

For循环临时变量的坑,这个其实我还没想明白,但是我知道这个是个大坑,希望有Python大神可以合理的解释一波!我遍历像素写了个for循环,但是当我遍历像素检查到一些符合条件的像素点的时候,我需要跳过几个像素点然后继续遍历。C++中如果你写下如下代码:

训练只会执行5次,会跳步的,相似的python代码如下:

for i in range(10):     i += 1     print(i)

你敢告诉我这段代码会执行几次吗,我告诉你绝对执行10次不管你加几。因为它会认为是两个同名的i变量,死活也不会给你跳步的,永远执行10次,我崩溃了,然后我只好把已经写完的代码重新改成while的方式。

03

问题三

使用Python的进程池遇到的问题!我想搞多线程,然后就发现可以搞进程池,当时就觉得这个东西好,这样我就并行了,一次跑八张图,没问题了。然后我就搞了一堆参数列表,有二维的,有一维的,直接往里面扔了:

with


    
 concurrent.futures.ProcessPoolExecutor(num_ps) as executor:  result= executor.map(param1s, param2s, …..paramns)

结果是直接挂了,根本无法多进程执行,后来发现参数列表必须是一维的,而且顺序必须相同,不然必挂!另外一个问题就是返回值的接受,这个也折磨我好久,感觉到处都是坑!

SUMMER

此外用python还有一个是不是就发作的问题,就各种变量没有初始化,或者忘记初始化,然后在方法中调用的时候PyQT应用会直接挂,而且不会有任何错误信息。然后就debug一步找,被自己蠢死!所以建议每个类必须有个init方法,把需要初始化的变量、组件、实例都预先初始化好,可以节省很多时间的。


OpenCV-Python视频教程30课时,请看B站:

https://www.bilibili.com/video/BV1hM4y1M7vQ


扫码查看OpenCV/Pytorch/OpenVINO视频教程



 推荐阅读 

大道至简 | CV系统化学习路线图发布了!

路线图 | 做CV开发者必备技能有哪些?

Pytorh轻松学系列 - 视频课程版本发布了!

OpenCV4 C++学习 必备基础语法知识三

OpenCV4 C++学习 必备基础语法知识二


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/117948