pip install opencv-python
cv2.imread()
cv2.IMREAD_COLOR : 默认使用该种标识。加载一张彩色图片,忽视它的透明度。
cv2.IMREAD_GRAYSCALE : 加载一张灰度图。
cv2.IMREAD_UNCHANGED : 加载图像,包括它的Alpha通道。 友情链接:Alpha通道的概念
frombuffer将data以流的形式读入转化成ndarray对象
numpy.frombuffer(buffer, dtype=float, count=-1, offset=0)
buffer:缓冲区,它表示暴露缓冲区接口的对象。
dtype:代表返回的数据类型数组的数据类型。默认值为0。
count:代表返回的ndarray的长度。默认值为-1。
offset:偏移量,代表读取的起始位置。默认值为0。
import cv2
import numpy as np
# 图片转为字节流
img_src = cv2.imread("E:1.jpg")
img_byte = img_src.tobytes()
# 字节流转为图片
nparr = np.frombuffer(img_byte, dtype=np.uint8)
# TCP都是以字节流的形式进行传输的,所以end_data得到的是完整图片的字节流形式,我们解码之后才可以使用。但是opencv只能解码uint8格式的数据,所以我们还需要先将其转化为为uint8格式的数据。
img_shape = int(math.sqrt(nparr.shape[0]/3))
img_dst= nparr.reshape(img_shape,img_shape,3)
cv2.imshow("dst", img_dst)
cv2.waitKey(0)
#https://blog.csdn.net/qq_29220369/article/details/121378176
import numpy as np
import cv2
import requests
def cv2ImgToBytes(img):
# 如果直接tobytes写入文件会导致无法打开,需要编码成一种图片文件格式(jpg或png),再tobytes
# 这里得到的bytes 和 with open("","rb") as f: bytes=f.read()的bytes可能不一样,如果用这里得到的bytes保存过一次,下次就f.read()和cv2ImgToBytes(img)会一样
return cv2.imencode('.png', img)[1].tobytes()
def bytesToCv2Img(bytes):
return cv2.imdecode(np.fromstring(r.content,"uint8"), 1)
img = cv2.imread(r"D:\temp\test.png")
cv2.imwrite(r"D:\temp\test1.png",img)
# 等价于
with open(r"D:\temp\test1.png","wb") as f:
f.write(cv2ImgToBytes(img))
url = 'http://5b0988e595225.cdn.sohucs.com/images/20190623/e185060522bb46a59217ff5d6addfe75.jpeg'
r = requests.get(url)
img=bytesToCv2Img(r.content)
cv2.imshow("Xuan Yi",img)
import cv2
import numpy as np
fn="22.jpg"
if __name__ == '__main__':
print('load %s as ...' % fn)
img = cv2.imread(fn)
sp = img.shape
print sp
sz1 = sp[0]#height(rows) of image
sz2 = sp[1]#width(colums) of image
sz3 = sp[2]#the pixels value is made up of three primary colors
print ('width: %d \nheight: %d \nnumber: %d' %(sz1,sz2,sz3))