import cv2#opencv读取
import matplotlib.pyplot as plt#一个用来展示的库
import numpy as np#数据处理的库
%matplotlib inline
#配合plt使用的魔法方法,且为nootbook独有
img = cv2.imread('cat.jpeg')
读取图片的3个颜色通道,注意opencv的读取顺序为BGR,不是RGB
#注意opencv读取BRG图片
b, g, r = cv2.split(img)
img = cv2.merge([r, g, b])
显示我们读取的图片,注意显示的时候我们要读取得图片颜色通道得顺序为RGB,这里我们要先做出更改
#图像显示
cv2.imshow('img',img)#展示图片,必须配合下面两个函数使用,否则会报错
cv2.waitKey(0)#参数为等待的时间单位毫秒,非正数表示一直等待;返回键盘值,若无操作返回-1
cv2.destroyAllWindows()#关闭界面
因为读取并显示会被我们经常使用,所以我们在这里打包成函数
#图像BGR读取换成RGB读取
def cv_read(name):
img = cv2.imread(name)
b, g, r = cv2.split(img)
img = cv2.merge([r, g, b])
return img
#图像显示打包成函数
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
读灰色图
img = cv2.imread('cat.jpeg',cv2.IMREAD_GRAYSCALE)#读灰色图
获取图片矩阵的行列数和维度
img.shape#图像矩阵的行列数。800为行
保存图片
cv2.imwrite('cat_gray.png',img)#保存图片
计算图片的像素点,即行列相乘
img.size#像素点,行列相乘,800X1200 = 960000
vc = cv2.VideoCapture('test.mp4')
if vc.isOpened():#判断是否争取读取
open, frame = vc.read()#读一帧,open是布尔变量,读取成功为TRUE,frame为图片的矩阵
else:
open = False
print(open)
while open:
ret,frame = vc.read()
if frame is None:
break
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)#矩阵转化成图片
cv2.imshow('result',gray)
if cv2.waitKey(10) & 0xff == 27:#提前退出的条件
break
vc.release()#释放视频
cv2.destroyAllWindows()
img = cv2.imread('cat.jpeg')
cat = img[0:400,0:600]#第一个参数为行,第二个为列
cv_show('cat',cat)
b,g,r = cv2.split(img)#切割图像b,g,r
img = cv2.merge((b,g,r))#3 个颜色通道合成一个3维彩色图片矩阵
#只保留红色通道
cur_img = img.copy()
cur_img[:,:,0] = 0;
cur_img[:,:,1] = 0;
cv_show('R',cur_img)
#注意opencv读取BRG图片
b, g, r = cv2.split(img)
img = cv2.merge([r, g, b])
top_size,bottom_size,left_size,right_size = (50,50,50,50)#范围
#四种方法
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size ,borderType = cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size ,cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size ,cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size ,cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size ,cv2.BORDER_CONSTANT,value=0)
import matplotlib.pyplot as plt
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
边界填充的结果如图所示
img_cat = cv2.imread('cat.jpeg')
img_dog = cv2.imread('dog.jpeg')
#注意opencv读取BRG图片
b, g, r = cv2.split(img_cat)
img_cat = cv2.merge([r, g, b])
b, g, r = cv2.split(img_dog)
img_dog = cv2.merge([r, g, b])
img_cat2=img_cat + 10
img_cat[:5,:,0]
img_cat2[:5,:,0]
img_cat2[:5,:,0] + img_cat[:5,:,0]#越界会重载,二进制,0b 11111111 = 256
cv2.add(img_cat2,img_cat)[:5,:,0]#add函数值越界不会重载,直接变成255
img_cat.shape
img_dog.shape
img_cat = cv2.resize(img_cat,(800,600))#这里的参数是反的
img_cat.shape
res = cv2.addWeighted(img_cat,0.4,img_dog,0.6,0)#shape一致,权重相加,最后哦一个参数为常量
plt.imshow(res)
res = cv2.resize(img,(0,0),fx = 3,fy = 1)
plt.imshow(res)
res = cv2.resize(img,(0,0),fx = 1,fy = 3)
plt.imshow(res)