python读取图⽚成为⼀维数组_在OpenCV⾥图像数据与⼀维
数组转换
通过读取⽂件之后,⽣成的图像数据⼀般是⼆维或三维数组,每个数组元素是8位字节⼤⼩。有时候从⽹络⾥接收到⼀串数据,它是字节顺序的,⽐如有30000个字节,想要把它转换为300X100的图像⼤⼩,这个怎么样操作呢?⼜或者想转换三维数组的彩⾊图像呢?⼜或者想从⼆维或三维数组转换为单个字节顺序从⽹络发送出去?
通过下⾯的代码来构造⼀个bytearray数组,bytearray是可变的bytes数据类型,可以通过bytearray创建和定义。⽤下⾯代码来构造3万个随机字节:
randBytes = bytearray(os.urandom(30000))
os.urandom函数随即产⽣n个字节的字符串,可以作为随机加密key使⽤,在这⾥把这些数据当作图像使⽤。接着需要把bytearray的⼀维数组转换为np.array的⼀维数组,如下:
flat = np.array(randBytes)
这时就可以得到np.array数组的形式,就可以对数组进⾏变换了,⽐如变换为⼆维的灰度图像数组,或三维彩⾊图像数组,当然要数组的元素个数符合H*W或者H*W*3的格式才能转换,如下:
grayImage = shape(100, 300)
colorImage = shape(100, 100, 3)
还可以进⾏逆转换,下⾯是把灰度图像数组转换为⼀维的数组:
flatGray = grayImage.flatten()
上⾯所有内容可以使⽤下⾯的例⼦来演⽰:
#python 3.7.4,opencv4.1
#
import numpy as np
import cv2
from matplotlib import pyplot as plt
import os
#⽤随机函数⽣成图像数据
randBytes = bytearray(os.urandom(30000))
#转换为numpy的⼀维数组
flat = np.array(randBytes)
#转换为⼆维数组,图像⼤⼩为100X300
grayImage = shape(100, 300)
#写⽂件
cv2.imwrite('temp1.png',grayImage)
cv2.imshow('grayImage',grayImage)
#转换为随机彩⾊⽂件,图像⼤⼩为100X100
colorImage = shape(100, 100, 3)
cv2.imwrite('temp2.png',colorImage) cv2.imshow('colorImage',colorImage) #从图像转换为⼀维顺序数组
flatGray = grayImage.flatten()
print(len(flatGray))
cv2.waitKey(0)python 定义数组
cv2.destroyAllWindows()
结果输出如下:
灰度图像
彩⾊图像
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论