循环条件下的通道拆分、灰度化与反色处理—opencv实战2
【代码】图像颜色与通道—opencv2。
·
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
while True: # 无限循环,持续显示画面,直到按下ESC退出
image = cv.imread("opencv_logo.jpg") # 每次循环都重新读取原图(保证反色不会叠加)
# 显示BGR,蓝、绿、红三通道分量(单通道显示为灰度图)
cv.imshow("blue", image[:, :, 0]) # 显示蓝色通道B:所有行、所有列、第0通道
cv.imshow("green", image[:, :, 1]) # 显示绿色通道G:所有行、所有列、第1通道
cv.imshow("red", image[:, :, 2]) # 显示红色通道R:所有行、所有列、第2通道;等效于显示倒数第一个颜色通道,红色 cv.imshow("red", image[:, :, -1])
b,g,r=cv.split(image) # 通道分离:将BGR图像拆成b、g、r三个独立单通道矩阵
img=cv.merge([b,g,r]) # 通道合并:将分离的B、G、R通道重新合并为彩色图像
gray1=0.299*r + 0.587*g + 0.114*b # 手动灰度化公式(标准加权灰度算法)
gray2=np.uint8(gray1) # 将浮点型灰度值强制转为8位无符号整型(0-255)
gray3=gray1.astype(np.uint8) # 另一种类型转换方式,与上一行功能完全相同
result = 255 - image # 颜色反转(反色)原理:255-当前像素值 = 反色
key = cv.waitKey(1) # 等待1毫秒,获取按键值,画面每秒刷新1000次
if key == 49: # 按键 1(ASCII码49) 判断是否按下数字键1
cv.imshow("gray", gray2) # 显示手动计算的灰度图
if key == 50: # 按键 2(ASCII码50) 判断是否按下数字键2
cv.imshow("result", result) # 显示颜色反转后的图像
if key == 27: # 判断是否按下ESC键(ASCII码27)
break # 退出无限循环
cv.destroyAllWindows() # 关闭所有OpenCV窗口,释放内存
更多推荐
所有评论(0)