#!/usr/bin/env python 
# coding=utf-8
#1.编译器声明和2.编码格式声明
#1:为了防止用户没有将python安装在默认的/usr/bin目录，系统会先从env(系统环境变量)里查找python的安装路径，再调用对应路径下的解析器完成操作，也可以指定python3
#2:Python.X 源码文件默认使用utf-8编码，可以正常解析中文，一般而言，都会声明为utf-8编码

import cv2 #引用opencv功能包

#创建窗口，用于显示图片      
cv2.namedWindow('MyWindow', cv2.WINDOW_NORMAL)

#提示停止方法
print ('Press key "Q" to stop.')

frame = cv2.imread('RGB.jpg',1) #以彩色图像格式读取图片

Quit=0 #是否继续运行标志位

while Quit==0:
    keycode=cv2.waitKey(3) #每3ms刷新一次图片，同时读取3ms内键盘的输入
    if(keycode==ord('Q')): #如果按下“Q”键，停止运行标志位置1，调出while循环，程序停止运行
        Quit=1
        break

    cv2.imshow('MyWindow', frame) #显示原图

    #RGB转灰度图像
    frame_gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #注意是BGRopencv读取图片的默认像素排列是BGR
    cv2.imshow('frame_gray', frame_gray) #直接imshow(),系统会自动执行nameWindow()创建窗口
    cv2.imwrite('gray.jpg',frame_gray) #保存灰度图像为文件

    #灰度图像二值化处理获得黑白图像
    frame_binary = cv2.inRange(frame_gray,100,150) #灰度值在100-150之间的像素点置为白色
    cv2.imshow('frame_binary', frame_binary) #显示二值化图像
    cv2.imwrite('frame_binary.jpg',frame_binary) #显示二值化图像

        
    #RGB通道分离
    b, g ,r =cv2.split(frame) #注意返回值顺序为b、g、r,因为opencv读取图片的默认像素排列是BGR
    #显示三通道图像
    cv2.imshow('r', r)#二值化后的通道R
    cv2.imshow('g', g)#二值化后的通道G
    cv2.imshow('b', b)#二值化后的通道B

    #分别保存三通道图片
    cv2.imwrite('r.jpg',r)
    cv2.imwrite('g.jpg',g)
    cv2.imwrite('b.jpg',b)

    #BGR转HSV颜色空间
    frame_HSV = cv2.cvtColor(frame,cv2.COLOR_BGR2LAB)
    cv2.imshow('frame_HSV', frame_HSV) #显示图片
    cv2.imwrite('frame_HSV.jpg',frame_HSV) #保存图片
    
    frame = cv2.imread('RGB.jpg',1) #循环读取图片

print ('Quitted!') #提示程序已停止
cv2.destroyAllWindows() #程序停止前关闭所有窗口



