出版图书

----------欢迎加入学习交流QQ群:657341423


基础概念:图像通道、图像深度、RGB模式


#*********************************
# 读写图像文件
import cv2
# cv2.imread 读取图片
# 参数cv2.IMREAD_GRAYSCALE 将图片生成灰度图像,将图像转化为单通道(8位灰度)
# 参数cv2.IMREAD_ANYCOLOR 和 cv2.IMREAD_UNCHANGED 保留图片原有颜色
# cv2.IMREAD_ANYDEPTH 将保持图像原来的深度
# cv2.IMREAD_COLOR 将图像转化为三通道(彩色)(默认参数)
# 此外还有多种图片读取模式,无论哪种模式,imread函数都会删除所有alpha通道信息
# alpha通道说明:https://baike.baidu.com/item/alpha%E9%80%9A%E9%81%93/3163191?fr=aladdin
img = cv2.imread('img.png', cv2.IMREAD_COLOR)
# imwrite函数图像必须为BGR或灰度格式。
cv2.imwrite('myimg.jpg',img)

#*********************************
# 图像与字节之间转换
import cv2,numpy,os
# rb是随机生成120000个字节数
rb = bytearray(os.urandom(120000))
# 将字节数转换成Numpy数值
fa = numpy.array(rb)

# 将数组生成300*400的图像
gimg = fa.reshape(300,400)
# 保存并生成灰度图像
cv2.imwrite('ging.png',gimg)

# 将数组生成3通道、大小为100*400的图像
bimg = fa.reshape(100,400,3)
# 保存并生成彩色图像
cv2.imwrite('bimg.png',bimg)

import cv2
img = cv2.imread('img.png', cv2.IMREAD_GRAYSCALE)
# *********像素操作***********
# img是灰度图像,因此是单通道,img[0,0]是设置图像0*0的像素颜色值
img[0,0] = 0
# imgC是三通道彩色图像,BGR格式。
imgC = cv2.imread('img.png')
# imgC[0,0]是设置图像0*0的像素颜色,[0,0,1]依次是BGR通道的像素颜色值
imgC[0,0] = [0,0,1]
# 设置G通道的0*0像素的颜色值为0
imgC[0,0,1] = 0

# 单独读取某一通道的某个像素颜色
# 读取B通道的110*110像素,0代表通道B
imgC.item(110,110,0)
# 单独设置某一通道的某个像素颜色
# 设置B通道的110*110像素颜色值为255
imgC.itemset((110,110,0),255)

# *********通道操作***********
# 将B通道的颜色值设置为0
imgC[:,:,0] = 0

# 图像区域移动,原理将某区域的像素赋值给新区域的像素,两个区域的像素范围大小要一致
roi = imgC[0:100, 0:100]
imgC[150:250, 150:250] = roi
cv2.imwrite('a.png',imgC)
print('a')

# ******获取图片信息*******
print(imgC.shape) # 图像的宽度、高度和通道数
print(imgC.size) # 图像的像素大小
print(imgC.dtype) # 图像的数据类型

显示图像

import cv2
img = cv2.imread('img.png')
# 函数 imshow显示图像,但随即消失
cv2.imshow('MyPic', img)
# 函数waitKey是等待用户按键触发,函数参数是等待时间,单位时间为ms
cv2.waitKey()
# 函数destroyAllWindows是释放opencv创建的窗口
cv2.destroyAllWindows()

参考资料:OpenCV 3计算机视觉 Python语言实现第二版

你可能感兴趣的:(Python,人工智能)