目录
1、安装
1.1opencv-python
1. 2 安装openCV-contrib-python
2 读取、打印图像
2.1 读取打印操作
2.2 将图片读取为灰度图
3 读取、打印视频
3.1 读取一个视频文件
3.2 查看第一帧是否读取
3.3 读取每一帧并播放
4 常见图像操作
4.1 裁剪图像
4.2颜色通道提取
5 边界填充
5.1 replicate直接复制
5.2 reflect反射法
5.3 wrap外包装法
5.4 constant 常量法
6 数值计算
3.4.1.15版本后,很多算法被申请了专利,而且改动较多,建议安装3.4.1.15之前的版本
pip install opencv-python==3.4.0.14
安装完成后,在命令行中测试是否安装成功
python
import CV2
cv2.__version__
pip install opencv-contrib-python==3.4.0.14
读取一个图像文件,打出图像的像素矩阵
img = cv2.imread('data/cat.jpg')
print(img)
打印照片
cv2.imshow('cat', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread('data/cat.jpg',cv2.IMREAD_GRAYSCALE)
vc = cv2.VideoCapture('data/test.mp4')
if vc.isOpened():
open,vs = vc.read()
else:
open = False
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)
# cv2.waitKey(10) 播放10秒
# 0xFF == 27 任意键退出
if cv2.waitKey(10) & 0xFF == 27:
break
其中,每一帧的读取在此处,frame是读到一帧内容,ret表示是否读取成功
ret,frame = vc.read()
转换为灰度,frame此时就是一个图像,将它转换为灰度
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
打印出这一帧
cv2.imshow('result',gray)
等待10ms,如果没有按下任何键就继续,如果按下ESC键就退出循环
if cv2.waitKey(10) & 0xFF == 27:
break
img = cv2.imread('data/cat.jpg')
cat = img[0:50,0:200]
b,g,r = cv2.split(img)
print(r.shape)
img = cv2.merge((b,g,r))
print(img.shape)
五种常见的边缘填充方法,首先读取图像文件,设置填充尺寸
img = cv2.imread('data/cat.jpg')
fill_lenth = 50
top_size,bottom_size,left_size,right_size = (fill_lenth,fill_lenth,fill_lenth,fill_lenth)
BORDER_REPLICATE,对边缘像素直接复制
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
BORDER_REFLECT,反射法,对感兴趣的图像中的像素在两边进行复制
例如: fedcba|abcdefgh|hgfedcb
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
BORDER_REFLECT_101,反射法,也就是以最边缘像素为轴对称
例如: gfedcb|abcdefgh|gfedcba
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
BORDER_WRAP: 外包装法
cdefgh|abcdefgh|abcdefg
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
BORDER_CONSTANT,常量法,常数值填充
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT,value=0)
整体代码,并且将填充效果打印出来
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('data/cat.jpg')
fill_lenth = 50
top_size,bottom_size,left_size,right_size = (fill_lenth,fill_lenth,fill_lenth,fill_lenth)
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)
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('BORDER_WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
打印效果
import cv2
import matplotlib.pyplot as plt
def cv_show(name,img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
img_cat = cv2.imread('data/cat.jpg')
img_dog = cv2.imread('data/dog.jpg')
# cv_show('cat', img_cat)
# cv_show('dog', img_dog)
print(img_cat[:5, :, 0],'\n')
img_cat2 = img_cat+10
print(img_cat2[:5,:,0],'\n')
new_cat = img_cat+img_cat2
print(new_cat[:5, :, 0],'\n')
new_add_cat = cv2.add(img_cat,img_cat2)
print(new_add_cat[:5, :, 0], '\n')
# 按指定大小缩放
img_dog = cv2.resize(img_dog,(img_cat.shape[1],img_cat.shape[0]))
print(img_cat.shape,img_dog.shape)
# 按比例缩放
img_dog_1 = cv2.resize(img_dog,(0,0),fx=3,fy=1)
res = cv2.addWeighted(img_cat,0.4,img_dog,0.6,0)
add_res = img_dog+img_cat
cv_show('res',res)
cv_show('add_res',add_res)
打印结果
D:\conda\envs\pytorch\python.exe A:\python_openCV\3_数值计算.py
[[142 146 151 ... 156 155 154]
[108 112 118 ... 155 154 153]
[108 110 118 ... 156 155 154]
[139 141 148 ... 156 155 154]
[153 156 163 ... 160 159 158]]
[[152 156 161 ... 166 165 164]
[118 122 128 ... 165 164 163]
[118 120 128 ... 166 165 164]
[149 151 158 ... 166 165 164]
[163 166 173 ... 170 169 168]]
[[ 38 46 56 ... 66 64 62]
[226 234 246 ... 64 62 60]
[226 230 246 ... 66 64 62]
[ 32 36 50 ... 66 64 62]
[ 60 66 80 ... 74 72 70]]
[[255 255 255 ... 255 255 255]
[226 234 246 ... 255 255 255]
[226 230 246 ... 255 255 255]
[255 255 255 ... 255 255 255]
[255 255 255 ... 255 255 255]]
(414, 500, 3) (414, 500, 3)
进程已结束,退出代码0
打印图像结果