如何将图像读取为numpy矩阵?如何将numpy矩阵变成图像保存?为什么cv2保存的图片是黑色的?为什么cv2显示的时候会黑屏?如何给灰度图增加一个维度?

图像的库是很多的,我发现自己真的额也是不精通,以后会专门使用几个库,让自己对一个库的知识体系更加完整,要不然真的很零散。然后在图像处理这方面,决定好好学习使用一下cv2。
opencv-python的文档在这里

安装

pip install opencv-python

读取你的图像数据

import cv2
img = cv2.imread("C:\\world.jpg")

这样的读取进来的数据是按照H,W,C的顺序读取进来的,然后数据的类型就是numpy矩阵,默认是uint8类型,还有个重点就是三个通道的顺序是BGR,和我们常识相反。想要转换成深度学习中可以处理的话,最好直接转换成0-1之间:

img = img.astype(np.float32)/255.

保存图像

如果想要保存的话,需要注意cv2使用的函数认为0-255之间的,所以刚才处理的图片一般要转换回这个区间才可以,否则可能保存的图片全是黑色的!

cv2.imwrite("C:\\world2.jpg", img*255.)

灰度图片

注意点:操作的时候使用0-1区间的像素值进行操作;显示的时候用float类型的0-1区间或者uint8类型的0-255区间,imshow会自动识别;但是imwrite保存的时候使用0-255区间!

  1. 直接就以灰度图片的形式读入:
img = cv2.imread("C:\\world.jpg", cv2.IMREAD_GRAYSCALE)
  1. 从BGR图转换过来
img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

还有注意的是,灰度图片的numpy矩阵的shape是H,W,不带C!如果想要增加一个维度的话,可以使用下面这个numpy基本操作:

img_gray = img_gray[:,:,None]

这样的话,得出的维度就是H,W,C,其中C=1。

显示图片

注意加上cv2.waitKey(0)不会有黑屏的情况。后面必须加上这句话!cv2.waitKey(delay),delay参数表示延迟多少毫秒。默认情况为0。当delay≤0,可以理解为延迟无穷大毫秒,就是暂停了。(参考链接

cv2.imshow('pic', img)
cv2.waitKey(0)

或者

cv2.imshow('pic', img*255.)
cv2.waitKey(0)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章