前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用OpenCV-Python做项目遇到三个让我崩溃的基础问题!

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

作者头像
OpenCV学堂
发布2021-08-05 16:20:09
7920
发布2021-08-05 16:20:09
举报

引言

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

01

问题一

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

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

02

问题二

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

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

代码语言:javascript
复制
for i in range(10):
     i += 1
     print(i)

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

03

问题三

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

代码语言:javascript
复制
with concurrent.futures.ProcessPoolExecutor(num_ps) as executor:
  result= executor.map(param1s, param2s, …..paramns)

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

SUMMER

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档