我想,当大家看到这张图的时候,大家一定开始怀疑小编思想出了问题,居然在搞黄色,其实并不是我思想出了问题或者眼神出了问题,实际上是我们经常忽略了一些问题,问题可能不严重,但是这种习惯容易让我们留下把柄,这样子就可能给别人一些怼你的机会(比如自己的导 师或老板等)
你看的出来的问题,别人一定也能看出来,而且还会放大。。。
——被导师喷了三年的经验之谈
通过一个简单的例子来训练我们的解决问题的能力:
目的:读取下面的图片,并显示
原图:
代码:
# 导入库
import cv2
import matplotlib.pyplot as plt
# 读取图片
img = cv2.imread('mm.jpg',cv2.IMREAD_COLOR)
# 显示图片
plt.imshow(img)
plt.show()
结果:
握草,好好的一个姑娘咋变色了?有点像阿凡达
代码很简单,但是比给你一段代码更重要的是遇到问题的时候如何去解决和思考
以下我制作的一个思维导图用于分析问题:
1、发现异常
发现问题的能力非常的重要,那些大佬们对事物都是有非常敏锐的嗅觉和洞察力,能够一下子发现的所在,通过一些细节就能获取大量有用的信息,属实很屌。
在这里,我们看到结果就能发现,有点不对,输出的图片和我想要的不同
——对错误有敏锐的嗅觉
2、描述问题
除了发现异常,我们还需要对问题进行一定的描述,在整理词汇描述的过程实际上就相当于在分析分问题了,这样子我们才能往一个正确的方向前进。
就比如去医院看病,你可能会说我身体不舒服,但是这样子的描述非常的不准确,甚至没有什么价值,然后你继续说我肚子有点不舒服,稍微的缩小了问题的范围,最后再具体的描述是肚子痛还是肚子胀等等,这样子才能实现最终的对症下药。
——准确清晰的描述问题
例如在这里,我发现虽然有显示出来图片的结果,但是这个颜色不是很正常,咋跟阿凡达一个色啊!
3、分析问题
(1)整理代码实现思路
主要是让自己对整体有一个更清晰的认识,方便可能出现问题的位置
思路:读取图片,显示图片
能显示出结果,说明至少读取和显示功能是能够实现的,但是内部(读入到显示)可能出现了一些小毛病
(2)对比,发现问题所在
plt.imshow出现问题,那我试一下cv2.imshow,居然没问题,查一下cv2读入是什么东西(格式等),cv2和plt的imshow的含义等,然后就可能猜到问题所在。
一查便发现原来cv2读入的通道顺序是BGR,但是plt的是RGB,因此显示的结果很奇怪。
4、解决问题
只需要将BGR通道顺序反过来即可
代码:
# 读入图片
img = cv2.imread('mm.jpg',cv2.IMREAD_COLOR)
# 改变通道顺序
img = img[:,:,[2,1,0]]
# 显示图片
plt.imshow(img)
plt.show()
备注:我用plt显示并不是我搞事情 ,实际上是有另外的用途的,方便我显示多张图片
总结:
实际上这个问题很容易,可能你一百度就能一下子找到答案,但是很多时候,我们遇到问题没有养成一个好的习惯,导致成长的很慢,习惯了伸手,之前遇到过一个人宁愿等半个小时,也不愿意自己百度或者去思考到底哪里错了(最后只是print拼错了)。养成一个思考的习惯比你学会这一段代码得到的价值多的多。