python中numpy数据创建OpenCV图像数据

当使用numpy创建OpenCV图像时,必须注意数组的数据类型。如果类型不正确,使用imshow显示图像可能会出现问题,但保存为图像文件则正常。确保使用np.uint8类型可以解决显示问题。代码示例中,通过将数组元素赋值给新数组,然后用imshow显示,发现图像显示不完整。改为正确类型后,图像显示恢复正常。然而,直接用imwrite保存图像则不受影响,显示正常。
摘要由CSDN通过智能技术生成

目的

在用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并打开,发现该图片是正常的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值