图像的原理--001(opencv自学)

图像的原理

学过线性代数的对矩阵并不陌生。一般来说,图像是一个标准的矩形,有着宽度(width)和高度(height)。而矩阵有着行(row)和列(column),矩阵的操作在数学和计算机中的处理都很常见且成熟,于是很自然的就把图像作为一个矩阵,把对图像的操作转换成对矩阵的操作,实际上所有的图像处理工具都是这么做的。

import cv2
import numpy as np
import os
from matplotlib import pyplot as plt
​
 
​
1.随机产生一组数
randomByteArray = bytearray(os.urandom(9))
flatNumpyArray = np.array(randomByteArray)
2.产生一个3×3像素的灰度图像(二维数组中的点代表该点的灰度值)
grayImage = flatNumpyArray.reshape(3,3)
#支持的值有:’none’, ‘nearest’, ‘bilinear’, ‘bicubic’,’spline16′, ‘spline36’, ‘hanning’, ‘hamming’, ‘hermite’, ‘kaiser’,
#‘quadric’, ‘catrom’, ‘gaussian’, ‘bessel’, ‘mitchell’, ‘sinc’,’lanczos’.
#如果interpolation = ‘none’,则不执行插值
plt.imshow(grayImage,cmap='gray',interpolation = 'none')
#把y轴的主刻度设置为10的倍数
plt.show()

grayImage[0,0]
120
3.产生一个3×1的像素彩色图像(二维数组中的值代表该点的BGR通道的值)
colorImage = flatNumpyArray.reshape(1,3,3)
#支持的值有:’none’, ‘nearest’, ‘bilinear’, ‘bicubic’,’spline16′, ‘spline36’, ‘hanning’, ‘hamming’, ‘hermite’, ‘kaiser’,
#‘quadric’, ‘catrom’, ‘gaussian’, ‘bessel’, ‘mitchell’, ‘sinc’,’lanczos’.
#如果interpolation = ‘none’,则不执行插值
plt.imshow(colorImage,cmap='gray',interpolation = 'none')
#把y轴的主刻度设置为10的倍数
plt.show()

colorImage[0,0]
array([120,  97,  38], dtype=uint8)
3.修改某个像素的深度值
# grayImage[0,0]=1
colorImage[0,0]=[100,100,200]
plt.imshow(colorImage,cmap='gray',interpolation = 'none')
plt.show()

​
4.修改整个图片的像素值
#获取图像高,宽,深度
h, w, d =colorImage.shape
#添加数组,高宽与原图像相等
add_img = np.ones((h, w), dtype=np.uint8)*20
add_img
array([[20, 20, 20]], dtype=uint8)
plt.imshow(add_img,cmap='gray',interpolation = 'none')
plt.show()

#opencv里自带了分离三通道的函数split(),返回值依次是蓝色、绿色和红色通道的灰度图
#可以直接显示BGR图像
b, g, r = cv2.split(colorImage)
colorImage[:, :, 0] += add_img
colorImage
array([[[120, 100, 200],
        [ 14, 205,  82],
        [199, 175, 177]]], dtype=uint8)
plt.imshow(colorImage,cmap='gray',interpolation = 'none')
plt.show()

jupyter 运行结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/liuyunshengsir/article/details/105876082