show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次我们研究了彩色图片的数据结构
- 三维矩阵
- 高度
- 宽度
- BGR三色元组
- 三维矩阵
- 可以自己定制某种特殊的图像
- 也可以复制现有图像的某个矩阵范围
- 像素可以进行分割和融合吗?
# -*- coding:utf-8 -*-
import cv2
import numpy as np
#读取图片
img = cv2.imread("monkey.png")
rows, cols, chn = img.shape
#拆分通道
b = cv2.split(img)[0]
#设置g、r通道为0
g = np.zeros((rows,cols), dtype=img.dtype)
r = np.zeros((rows,cols), dtype=img.dtype)
#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
#等待显示
cv2.waitKey(0)
- RG通道为纯黑
- B通道来自于原始图像
- 刷新蓝桥环境
- 得到下图
- 可以把下图中BGR三通道分离吗?
import cv2
image = cv2.imread("/home/shiyanlou/rgb.jpg")
cv2.imshow("image",image)
b,g,r = cv2.split(image)
cv2.imshow("red",r)
cv2.imshow("green",g)
cv2.imshow("blue",b)
cv2.waitKey()
cv2.destroyAllWindows()
- 分离通道效果
- 可以把分离的通道再合成吗?
import cv2
image = cv2.imread("/home/shiyanlou/rgb.jpg")
cv2.imshow("image",image)
b,g,r = cv2.split(image)
bgr = cv2.merge([b,g,r])
cv2.imshow("bgr",bgr)
rgb = cv2.merge([r,g,b])
cv2.imshow("rgb",rgb)
cv2.waitKey()
cv2.destroyAllWindows()
- 可以合成通道
- 次序不同会有不同效果
- 可以把这张彩色照片反相吗?
import cv2
image = cv2.imread("/home/shiyanlou/rgb.jpg")
cv2.imshow("image",image)
h,w,c = image.shape
for row in range(h):
for col in range(w):
b, g, r = image[row, col] #直接读取到三个通道的值
b = 255 - b #实现图像色彩取反。像素值范围为[0,255]
g = 255 - g #实现图像色彩取反。像素值范围为[0,255]
r = 255 - r #实现图像色彩取反。像素值范围为[0,255]
image[row, col] = [b, g, r] #将原图像上的对应像素取反
cv2.imshow("nega",image)
cv2.waitKey()
cv2.destroyAllWindows()
- 效果
- 从 光成像 的 RGB三原色
- 变成了 印刷成像 的 CMYK青品黄黑
- 可以有不透明度alpha通道吗?
import cv2
image = cv2.imread("/home/shiyanlou/rgb.jpg")
bgra_image= cv2.cvtColor(image,cv2.COLOR_BGR2BGRA)
b,g,r,a = cv2.split(bgra_image)
a[:,:] = 50
bgra_50 = cv2.merge([b,g,r,a])
print(bgra_50)
cv2.imwrite("rgb50.png",bgra_50)
cv2.imshow("bgra_50",bgra_50)
cv2.waitKey()
cv2.destroyAllWindows()
- 用火狐打开文件
- 代码
import cv2
import numpy as np
before = cv2.imread("/home/shiyanlou/tiktok.jpg")
cv2.imshow("before",before)
after = np.zeros((300,300,3),np.uint8)
after[30:300,30:300,0] = before[0:270,0:270,0]
after[30:300,30:300,1] = before[0:270,0:270,1]
after[0:270,0:270,2] = before[30:300,30:300,2]
cv2.imshow("after",after)
cv2.waitKey()
cv2.destroyAllWindows()
- 结果
- 图像不但可以从像素矩阵的方式进行裁切与合并
- 还可以从通道的角度分离与合并
- 默认的状态就是BGR三色通道融合
- 可以将其他通道的信息独立筛选出来
- 可以在图像文件上写字吗?🤔
- 我们下次再说 👋