浅谈Opencv (上)

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()

在这里插入图片描述

发布了129 篇原创文章 · 获赞 148 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/matafeiyanll/article/details/105326667