import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
#---------------------------- 1.读取图像(路径)
#cv2.imread("C:/Users/8.png") #绝对路径: 路径的反斜杠需要转换 !!!!!!(将\转换为/,因为LINux识别不了)
img = cv.imread('666.jpg') #相对路径 读取照片 (读取的是vision中图像) (常用)
#---------------------------- 2.读取图像(方式)
#img = cv.imread('666.jpg',cv.IMREAD_GRAYSCALE) #以灰度模式加载图像(黑白)
#img = cv.imread('666.jpg',cv.IMREAD_UNCHANGRED) #彩色
#img = cv.imread('666.jpg',cv.IMREAD_COLOR) #彩色,但图像的透明度会被忽略
#img = cv.imread('666.jpg') #彩色
#img = img[0:100,0:50] # 选取部分 进行截取 [高h:100,宽w:50]
#img = img.copy() # 对图像进行复制
#---------------------------- 3.获取图像数据
#print(np.array(img)) #输出RGB矩阵 (在这里的数值显示的是:BGR !倒过来的【三维】
#print(img.shape) #输出(1080, 1920, 3) [在这里的数值显示的是:h(high),w(width),c(BGR)]
#print(type(img)) #输出类型 <class 'numpy.ndarray'>
#print(img.size) #输出: 6220800 【像素点大小】
#print(img.dtype) #输出: uint8 【图片数值类型】
'''
b,g,r = cv.split(img) #提取 BGR 颜色通道
print(r.shape) #对r通道进行提取
print(g.shape) #对g通道进行提取
print(b.shape) #对b通道进行提取
'''
'''
#---------------------只保留R [转化为红色图片]
def red():
img2 = img.copy()
img2[:,:,0]=0 #将B通道的值全部变为0
img2[:,:,1]=0 #将G通道的值全部变为0
cv.imshow('666',img2)
'''
'''
#---------------------只保留G [转化为绿色图片]
def green():
img2 = img.copy()
img2[:,:,0]=0 #将B通道的值全部变为0
img2[:,:,2]=0 #将G通道的值全部变为0
cv.imshow('666',img2)
'''
'''
#---------------------只保留B [转化为蓝色图片]
def green():
img2 = img.copy()
img2[:,:,1]=0 #将B通道的值全部变为0
img2[:,:,2]=0 #将G通道的值全部变为0
cv.imshow('666',img2)
'''
#---------------------------- 4.保存数据
#cv.imwrite('666.jpg',img) #保存图像[直接将img图像存储在vision中,命名为666.jpg]
#cv.imwrite('C:/Users/Pan/1.jpg',img) #保存图像[将img图像存储在设定好的地方]
#---------------------------- 5.打开图像
'''
#----------------------------第一种方法:
def open_img(name,img): # 设置打开图片函数: open_img(name,img)
cv.imshow(name,img) #(打开图片,name为定义窗口名字[而且必须为'xxx'] 是字符串类型 ,img为引用图像名字)
cv.waitKey(0) #(设置时间,0为一直打开,单位为毫秒)
cv.destroyAllWindows() # 创建Windows窗口
name = '6'
open_img(name,img)
'''
#----------------------------第二种方法:
#plt.imshow(img) #问题: 为什么是蓝色图像?
#plt.show() #因为:cv.imread()读取的是值为:BGR
#但是:plt.imshow()取数值绘图是:RGB
#----------------------------解决方法:
b,g,r = cv.split(img) #取出颜色通道的值
img2 = cv.merge([r,g,b]) #把BGR转化为RGB 就可以了!!!
plt.imshow(img2)
plt.show()