图像
- 计算机中图像就是由像素点组成,
- RGB表示颜色通道,R红色G绿色B蓝色,[0-255]表示该像素点的亮度.
- 黑白图像只有一个通道表示亮度
- 图像是500*500,则RGB三个通道均是500*500的矩阵,一个图像则为[500,500,3]
数据读取
对图像的操作
import cv2 #OpenCv,有很多计算机视觉需要的的算法
import matplotlib.pyplot as plt #Pyplot 包含一系列绘图函数的相关函数,用as给它设置一个别名plt
import numpy as np #支持大量的维度数组与矩阵运算 用as给其设置别名np
#%matplotlib Inline#用它可以省略plt.show(),but这是eclipse好像用不了,注释掉了
import os #导入os模块
from PIL import Image
os.chdir('D:/AAA大学/3大二上/计算机视觉/第2-7章笔记课件') #此处路径中可以有中文字符
image = cv2.imread("cat.jpg");
data = np.asarray(image);#转换为矩阵
print(data);#输出矩阵
#图像的基本数值(h,w,c),c是3,表示当前图像是RGB图像
print(image.shape)
#cv2.IMREAD_COLOR 彩色图
#cv2.IMREAD_GRAYSCALE 灰度图
#第一个参数为图片名,第二个参数表示读取数据的类型
img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE);
data2 = np.asarray(image);#转换为矩阵
print(data2);#输出矩阵
print(img.shape);#图像基本数值
print(type(img));#图像格式
print(img.size);#图像像素点个数
print(img.dtype);#图像数据类型
#-------图像的显示
cv2.imshow('image',image);
#等待时间,为0时,按任意键即可关闭,为10000ms时,即显示10000ms自动关闭
cv2.waitKey(10000);
#关闭所有窗口
cv2.destroyAllWindows();
# 定义一个函数,用来读取图像
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imshow('image',img);
cv2.waitKey(10000);
cv2.destroyAllWindows();
对视频进行处理
import cv2
import matplotlib.pyplot as plt
import numpy as np
import os
from PIL import Image
from conda.common._logic import FALSE
os.chdir('D:/AAA大学/3大二上/计算机视觉/第2-7章笔记课件')#文件路径
vc=cv2.VideoCapture('test.mp4')#读取文件
if vc.isOpened():
open, frame=vc.read()#open为True,
else:
open=FALSE
while open:
ret, frame=vc.read() #ret为True
if frame is None:
break
if ret==True:
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#文件,读取数据类型
cv2.imshow('result',gray)
if cv2.waitKey(1)&0xFF==27:#waitKey.想要慢一点就数字越大越好
cv2.destroyAllWindows();
break
vc.release()
cv2.destroyAllWindows()
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#截取部分图像数据
img=cv2.imread('cat.jpg')
cat=img[0:50,0:200]#截取区域
cv_show('cat',cat)
#颜色通道提取
b,g,r=cv2.split(img)
print(b)
print(b.shape)
img=cv2.merge((b,g,r))
print(img.shape)
#只保留R通道
cur_img=img.copy()#复制
cur_img[:,:,0]=0
cur_img[:,:,1]=0#把GB通道置0即可
cv_show('R',cur_img)
#只保留G通道
cur_img=img.copy()
cur_img[:,:,0]=0
cur_img[:,:,2]=0
cv_show('G',cur_img)
#只保留B通道
cur_img=img.copy()
cur_img[:,:,1]=0
cur_img[:,:,2]=0
cv_show('B',cur_img)