def load_image_into_numpy_array(path):
img_data=tf.io.gfile.GFile(path,'rb').read()
image=Image.open(BytesIO(img_data))
# print(image.shape)
(im_width,im_height)=image.size
return np.array(image.getdata()).reshape((im_height,im_width,3)).astype(np.uint8)
有个国外tensorflow的文档介绍 object detective 时使用了上面的自定义函数,最初没有在意,以为是特殊的转换要求之类的。
比较tensorflow 看起来很多花花肠子的样子!
后来觉得object detective 性能太低了,于是从性能分析的角度找原因,重新仔细的看了一下代码,这不就是把图片读成numpy 吗?
为啥要写成上面这个样子?使用cv2 哪里不香了?
然后改成了下面这个
def load_image_into_numpy_array(path):
image=cv2.imread(path)
image2 = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
return image2
上面的代码由于RGB和BGR 的问题,进行了转换
效果一模一样,性能提升100倍!
18.8088018 0.17322889999999802
简直让人无语了!
注意cv2 和plt 显示图片的通道是不一样的。
一个是RGB,另外一个BGR
有些人使用了下面的代码来处理:
img = cv2.imread('xxx.jpg')
b,g,r = cv2.split(img)
img2 = cv2.merge([r,g,b])
我就想问问: 明明cv2 中有cvtColor 啊
cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
这些写代码的人群是咋了???