数据的读取
cv2.IMREAD_COLOR:彩色图像
cv2.IMREAD_GRAYSCALE:灰度图像
import cv2
img = cv2.imread('E:/opencv/open-cv/2-7/cat.jpg',1)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imread()读取图片,当括号里面是1时,也就是替代了cv2.IMREAD_COLOR,得到彩色图。
cv2.imread()读取图片,当括号里面是0时,替代了cv2.IMREAD_GRAYSCALE,得到灰度图。
cv.inshow()函数为创建一个展示窗口,括号里面分别为图片名字和读取哪个图片。
cv2.waitKey(0) 等待时间多久,其中括号中0表示任意键可以中止显示图片。
cv2.destroyAllWindows() 关闭窗口。
2.opencv图片颜色转换
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
img=cv2.imread('E:/opencv/open-cv/2-7/cat.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("img_gray", img_gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
由于cv2读取的图像格式为BGR,而Matplotlib画的是RGB,因此需要对格式进行转换。
cv2.COLOR_BGR2GRAY转化成灰度图,cv2.COLOR_BGR2RGB转换成RGB图,cv2.COLOR_BGR2HSV转换成HSV图。
其中HSV分别表示如下,转换图片也如下图所示:
H - 色调
S - 饱和度
V值(强度)
3.图像保存
cv2.inwrite('cat.png',img_gray)
img_gray.type()
只需要输入cv2.inwrite()函数即可保存图像。
img_gray.type()可以查看数据类型
4.视频图像的读取
vc = cv2.VideoCapture('E:/opencv/open-cv/2-7/test.mp4')
cv2.VideoCapture()函数用来捕捉摄像头,控制不同的设备。
if vc.isOpened():
open, frame =vc.read()
else:
open = False
print(frame)
检查视频是否读取错误,其中open只有两个值要么True,要么是False;frame为读取一帧一帧的值。
while open:
ret, frame = vc.read()
#print(ret)
if frame is None:
break
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('result',gray)
if cv2.waitKey(20)& 0xFF==27:
break
vc.release()
cv2.destroyAllWindows()
其中cv2.waitKey(20)& 0xFF==27,这句就是如果期间有按键按下返回的值就是按下按键的ASCII值,就比如esc键的ASCII值是27,cv2.waitKey(20) & 0xFF==27就是当按下按键是esc的时候返回true。0xFF意思是16进制的FF也就是八位2进制数1111 1111,如果引入& 0xFF==27 那么得出的结果永远是后八位,这样就可以排除其他按键的干扰。
vc.release() 释放硬件资源。
5.截取图像操作
import cv2
img = cv2.imread('E:/opencv/open-cv/2-7/dog.jpg',1)
dog = img[0:200,0:200]
cv2.imshow("img", dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
截取狗狗图像对比如下:
6.提取颜色通道
其中一张图片b,g,r的shape值是一样的。利用cv2.merge((b,g,r))函数是可以重构图像颜色通道。
b,g,r = cv2.split(img)
只保留一个通道。b,g,r分别代号为0,1,2,下面保留r通道。
img1 = img.copy()
img1[:,:,0]=0
img1[:,:,1]=0
cv2.imshow('r',img1)
7.图像边界填充
#边界填充
top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT)
reflect_101 = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_WRAP)
constant = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_CONSTANT)
#绘制子图
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(reflect_101, '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()
borderType:图像填充的方法。
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称。
BORDER_WRAP:外包装法。
BORDER_CONSTANT:常量法,常数值填充,需要在设置一个value值,已显示填充的颜色。
展示图如下: