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窗口,释放内存
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐