安装OpenCv3.0+Ubuntu16.04
import cv2import numpy as np
img = np.zeros((3,3), dtype=np.uint8)
img
array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtype=uint8)
cv2.cvtColor将图像转换为BGR格式
img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
img
array([[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]]], dtype=uint8)
img.shape
(3, 3, 3)
import matplotlib.pyplot as plt
plt.imshow(img)plt.show()
以灰度图像夹在文件
imread()方法的可选参数:IMREAD_ANYCOLOR=4,
IMREAD_ANYDEPTH=2,IMREAD_COLOR = 3,
IMREAD_GRAYSCALE=0, IMREAD_LOAD_GDAL=8,
IMREAD_UNCHANGED = -1
grayImage = cv2.imread('data/apple.jpg', cv2.IMREAD_GRAYSCALE)
plt.imshow(grayImage)plt.show()
cv2.imwrite('data/grayapple.jpg', grayImage)
True
图像与原始字节之间的转换
如果图像的每个像素都是由一个8位的二进制数表示,可以通过显式的转换为一维的bytearray格式,
bytearray格式的图像数据也可以resize为numpy数组格式的图像.
# 将随即生成的数据转换为灰度图像和BGR图像import osimport cv2import numpy as npimport matplotlib.pyplot as plt# 随即像素点的数值# 等价np.random.randint(0,255,120000)randomBytearray = bytearray(os.urandom(120000))# 转换为numpy数组flatNumpyArray = np.array(randomBytearray)# 转换为300*400灰度图像数组grayImage = flatNumpyArray.reshape(300,400)# 转换为BGR图像格式bgrImage = cv2.cvtColor(grayImage, cv2.COLOR_GRAY2BGR)# 调整数组大小bgrImage2 = flatNumpyArray.reshape(100, 400, 3)
灰度图
plt.imshow(grayImage)plt.show()
彩色图
cv2.cvtColor()通过将单通道的值复制到其他两个通道
plt.imshow(bgrImage)plt.show()
plt.imshow(bgrImage2)plt.show()
访问某个像素的值
# grayImagegrayImage.item(100,100)
67
grayImage[100,100]
67
# bgrImage chamle BbgrImage.item(100,100,0)
67
bgrImage[100,100,0]
67
修改某个特定位置的像素值
grayImage.itemset((100,199),250)bgrImage.itemset((100,100,0),250)
修改某个通道的值
# 修改前plt.imshow(bgrImage2)plt.show()
# 修改后bgrImage2[:,:,1] = 111plt.imshow(bgrImage2)plt.show()
用一张图片的特定区域覆盖另一张图片的特定区域
img1 = cv2.imread('picture/img1.jpg',cv2.IMREAD_GRAYSCALE)img2 = cv2.imread('picture/img2.jpg',cv2.IMREAD_GRAYSCALE)
roi = img2[199:399, 199:399]
img1[199:399, 199:399] = roiplt.imshow(img1)plt.show()