Opencv (上)
常见的图片格式:
1、jpg(jpeg) : 用最少的磁盘空间得到较好的图片质量
2、png: 无损压缩的位图片形格式
常见的图片类型:
【黑白】【彩色】
图片的本质:
由像素点组成的矩阵,每个元素(像素点)都是在0-255之间
为什么每个像素点都是界于0-255之间?
1、位图模式(黑白图像) 仅仅只有1位深度的图像 ->(0,1,1,1,0 …)
0->纯黑色
1->纯白色
2、灰度图像:【0,255】
有8位深度的图像
(0,0,0,0,0,0,0,0,0) ->2**0=1
(1,1,1,1,1,1,1,1,1) ->2**8 = 256 因为从0开始计数,所以为255
3、彩色图像:【0,255】
多了三个通道:RGB (色彩三原色)
一共3个通道,每个通道8个深度 产生256**3个颜色
使用Opencv读取第一张黑白图片
import cv2
#所有的路径必须是英文【存在中文读取时不报错,读取结果位None】
path = r".\timg.jpg"
#path: 路径 0:代表灰度图 1;彩色图
img = cv2.imread(path,0)
#opencv读进来的形式以什么样的形式存在 <class 'numpy.ndarray'>
print(type(img))
#读取图片储存形式 (1280, 1067) [Height,Width]
print(img.shape)
#储存类型:uint8 ->无符号8位整型(0,1,0,1,0,1,0,1) 255白,0黑
print(img)
确认白色与黑色及图片显示
cv2.imshow('image',img)
cv2.waitKey(0)
图片的裁剪:矩阵的切割
path1 = r"./white.png"
path2 = r"./black.png"
img1 = cv2.imread(path1,0)
img2 = cv2.imread(path2,0)
print(img1.shape,img2.shape)
#numpy叠加
import numpy as np
new_img1 = img1[:100,:130]
new_img2 = img2[:300,:130]
#垂直拼接,列要相等
new_img = np.vstack((new_img1,new_img2))
cv2.imshow('new_img',new_img)
cv2.waitKey(0)
#水平拼接,行要相等
new_img3 = img1[:100,:130]
new_img4 = img2[:100,:150]
new_img = np.hstack((new_img3,new_img4))
cv2.imshow('new_img',new_img)
cv2.waitKey(0)
图片的保存
#(imwrite(path,target))
cv2.imwrite(r"./newimage.jpg",new_img)
随机生成图片
#随机生成一个数据,彩色图片
arry1 = np.random.randint(0,255,(700,500,3),dtype='uint8')
cv2.imshow('new_img',arry1)
cv2.waitKey(0)
使用Opencv读取第一张彩色图片
path = r".\1.jpg"
img = cv2.imread(path,1) #1为彩色图片
print(img.shape) #(Height,Width,3)
cv2.imshow('img',img)
cv2.waitKey(0)
彩色通道的拆分与通道的合并
path = r".\2.jpg"
img = cv2.imread(path,1) #1为彩色图片
print(img.shape) #(Height,Width,3)
#拆分方式1
imgB = img[:,:,0]
imgG = img[:,:,1]
imgR = img[:,:,2]
#拆分方式2
b,g,r = cv2.split(img)
#合并拆分结果
image = cv2.merge([b,g,r])
查看某个通道图片
path = r".\2.jpg"
img = cv2.imread(path,1) #1为彩色图
#查看B通道[蓝色]
img_B = img.copy()
img_B[:,:,1] = 0
img_B[:,:,2] = 0
cv2.imshow('image',img_B)
cv2.waitKey(0)
色彩空间转换
1、色彩空间【RGB】
(1) HSV: 更类似于人类感觉的颜色的方式。
H:色相 (Hue)
S:饱和度 (Saturation)
V:亮度(Value)
(2)YUV:Y:亮度信号 U\V:两个色彩信号,色彩的饱和度
(3) Lab:由国际照明委员会建立。L:整张图的明亮度 a\b:负责颜色的多少
path = r".\2.jpg"
img = cv2.imread(path,1) #1为彩色图
cv2.cvtColor(img,cv2.COLOR_YUV2BGR)
cv2.imshow('image',img)
cv2.waitKey(0)
统计一张图片像素点个数
import numpy as np
import matplotlib.pyplot as plt
import cv2
path = r".\2.jpg"
img = cv2.imread(path,1) #1为彩色图
h,w,g = np.shape(img)
hest = np.zeros([256],dtype=np.int32)
#遍历图片矩阵
for row in range(h):
for col in range(w):
pv = img[row,col,1]
hest[pv] = hest[pv] + 1
#绘图的操作
plt.plot(hest,color='r')
plt.xlim([0,256])
plt.show()