Opencv学习之:如何将矩阵转换成图片,如何将图片转换成矩阵

文章目录

  • 图片转化成矩阵
    • 方法一:
    • 方法二:
  • 矩阵转换成图片
    • 错误代码段
    • 正确代码段

图片转化成矩阵

方法一:

使用 PIL 的方法 + img.getdata() 提取数据 + np.array() 的转换

  • 最后得到的结果是个二维数组
from PIL import Image
import numpy as np
'''图片转数组'''
img = Image.open('1.jpg')   # 使用 PIL 打开图片
data = img.getdata()   # 获取图片的数据信息 class <'ImagingCore'>
data = np.array(data)   # 把这个数据通过 numpy 转换成多维度的张量
print(data)

Opencv学习之:如何将矩阵转换成图片,如何将图片转换成矩阵_第1张图片

方法二:

直接用 cv2.imread() 读出来就是个三维的数组

import cv2
img2 = cv2.imread('1.jpg')  # 使用 cv2 来打开图片
print(img2)

Opencv学习之:如何将矩阵转换成图片,如何将图片转换成矩阵_第2张图片
如果想知道方法一和方法二的区别,可以查阅我的上一篇 opencv 学习文章:
https://blog.csdn.net/qq_42902997/article/details/108326214

矩阵转换成图片

  • 产生一个 625 * 625 * 3 的图片,先产生 625 * 625 * 3 = 1171875 个像素点
  • 将产生的数据通过numpy 进行 resize
  • 将处理过的矩阵通过 imwrite 写成新的图片(如果没有这一步而直接 imshow 会出错)

错误代码段

data = [random.randint(0,255) for _ in range(1171875)]
data = np.resize(data,(625,625,3))
print(data)

cv2.imshow('img2',data)  # 错误示范:这里直接将矩阵是 imshow 不出结果的
cv2.waitKey(0)

正确代码段

import numpy as np
import cv2
import random

data = [random.randint(0,255) for _ in range(1171875)]   
data = np.resize(data,(625,625,3))
print(data)
cv2.imwrite('2.jpg',data)
s = cv2.imread('2.jpg')
cv2.imshow('img2',s)
cv2.waitKey(0)

最后产生了一张这样的图:其中像素点的值都在 0-255 之间
Opencv学习之:如何将矩阵转换成图片,如何将图片转换成矩阵_第3张图片

你可能感兴趣的:(Opencv学习,python,numpy,opencv)