目的
在用python的numpy的array创建OpenCV图像数据类型时,如果不注意array的类型,最后显示的图像,会出现问题,但是将其保存为图像文件(.jpg或者.png等)时,又是正常的。
import numpy as np
import cv2
w = 800
h = 600
img = cv2.imread("./images/image82.jpg")
blank = np.zeros((800,600,3))
blank[0] = img[0]
blank[1] = img[1]
blank[2] = img[2]
cv2.imshow("window",blank)
cv2.waitKey(0)
运行上述代码会出现一下情况:
从上图中可知,图像中有一些原图的痕迹的,但是很少。这是因为python中读取的OpenCV的imread函数默认读取的是8位的unsigned int类型,因此在用numpy创建时,应该将类型设置为np.uint8:
#上述代码中的:blank = np.zeros((800,600,3)),改为
blank = np.zeros((800,600,3), dtype=np.uint8)
这样显示就正常了。
但是如果不用用imshow()显示,直接用imwrite() 保存就是正常的图像:
import numpy as np
import cv2
w = 800
h = 600
img = cv2.imread("./images/image82.jpg")
blank = np.zeros((800,600,3))
blank[0] = img[0]
blank[1] = img[1]
blank[2] = img[2]
cv2.imwrite("./images/result.jpg",blank)
然后在文件夹中找到result.jpg并打开,发现该图片是正常的。