00安装
pip install opencv-python
01导入模块
import cv2 #默认BGR
02.0读取图片并展示
import cv2 #默认BGR 下面rgb
# import matplotlib.pyplot as plt
#路径
path="../picture/cat1.jpg"
#读取图片
img=cv2.imread(path,cv2.IMREAD_GRAYSCALE)#路劲 读取形式(这里以灰度图形式等下展示的为灰度图)
#打印图片矩阵
print(img)
cv2.imshow('image',img)#窗口名称,展示的内容
#等待
cv2.waitKey(0)
cv2.destroyAllWindows()#触发关闭 任意键触发
#保存
cv2.imwrite('mycat.png',img)#名称,内容02.1视频或摄像头读取
import cv2
#读取视频
#cap = cv2.VideoCapture("asd.mp4")#读取路径 填数字代表摄像头0代表第一个摄像头
#读取摄像头
cap = cv2.VideoCapture(0)#读取路径 填数字代表摄像头0代表第一个摄像头
while(True):
ret, frame = cap.read() # 读取一帧的图像 ret是否成功读取 frame 为图片内容
cv2.imshow('Face Recognition', frame)#窗口展示与上面图片展示一样
if cv2.waitKey(1) & 0xFF == ord('q'):#等待触发与上面图片cv2.destroyAllWindows()#触发关闭 任意键触一样 这里是指定键可以换其他
break
cap.release() # 释放摄像头
cv2.destroyAllWindows()03保存
#保存
cv2.imwrite('mycat.png',img)
print("格式",type(img))#格式
print(img.size,"#像素点")#像素点
print("数据类型",img.dtype)#数据类型图片处理
04截取部分图像
import cv2 #默认BGR 下面rgb
import matplotlib.pyplot as plt
import numpy as np
# %matplotlib inline #在jupyter才可用
#直接展示 不用调用plt.show
path="../picture/cat1.jpg"#中文路径
#读取
img=cv2.imread(path)
#展示(目的与处理的图片对比)
cv2.imshow('image',img)
#截取
cat=img[50:100,200:400] #高范围,宽范围
#展示截取的图片
cv2.imshow('cat',cat)
cv2.waitKey(0)#等待
cv2.destroyAllWindows()#触发05颜色通道提取
import cv2 #默认BGR 下面rgb
#为了展示的时候不要写三行代码这么多定义一个展示的函数
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
读取
img=cv2.imread('../picture/cat1.jpg')
# cat=img[0:50,0:200] #高范围,宽范围
# cat=img[100:150,200:400] #高范围,宽范围
#cat=img[50:55,200:204]
#展示原图
cv_show('cat',cat)
#拆分通道
b,g,r=cv2.split(cat)#通道拆分(cv2.split)
print(cat)
print(b)
print(g)
print(r)
# print(r.shape)
#合并通道
img=cv2.merge((b,g,r))#合并(cv2.merge)
print(img.shape)
img=cv2.merge((b,g,r))
print(img.shape)
# 只保留R 其他通道设为0
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
cv_show('R',cur_img)
# 只保留G 其他通道设为0
cur_img = img.copy()
cur_img[:,:,0] = 0
cur_img[:,:,2] = 0
cv_show('G',cur_img)
# 只保留B 其他通道设为0
cur_img = img.copy()
cur_img[:,:,1] = 0
cur_img[:,:,2] = 0
cv_show('B',cur_img)06边界填充
import cv2 #默认BGR 下面rgb
import matplotlib.pyplot as plt
import numpy as np
img=cv2.imread('../picture/cat1.jpg')
cv2.imshow("name", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
top_size,bottom_size,left_size,right_size = (50,50,50,50)
# BORDER_REPLICATE:复制法,也就是复制最边缘像素。
# BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
# BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
# BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
# BORDER_CONSTANT:常量法,常数值填充。
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()07数值计算以及图片融合
import cv2 #默认BGR 下面rgb
import matplotlib.pyplot as plt
import numpy as np
img_cat =cv2.imread('cat.jpg')
img_dog=cv2.imread('dog.jpg')
cv2.imshow("name", img_cat)
cv2.waitKey(0)
cv2.destroyAllWindows()
img_cat2= img_cat +10
print(img_cat[:5,:,0])
cv2.imshow("name", img_cat2)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(img_cat2[:5,:,0])
#相当于% 256
print((img_cat + img_cat2)[:5,:,0] )
print(cv2.add(img_cat,img_cat2)[:5,:,0])
# 图像融合
# img_cat + img_dog
cv2.imshow("name", img_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
# img_cat.shape
img=cv2.imread('cat.jpg')
img_dog = cv2.resize(img_dog, (500, 414))#把狗变更成(500, 414)
# img_dog.shape
cv2.imshow("name", img_dog)
cv2.waitKey(0)
cv2.destroyAllWindows()
res = cv2.addWeighted(img_cat, 0.5, img_dog, 0.4, 0)
#融合 0.4 权重项 0为亮度微调 R = img_cat x 0.4 +img_dog x0.6 +0
plt.imshow(res)
cv2.imshow("name", res)
cv2.waitKey(0)
cv2.destroyAllWindows()
res = cv2.resize(img, (0, 0), fx=0.4, fy=0.4)#把狗变更成放大4.4
plt.imshow(res)
cv2.imshow("name", res)
cv2.waitKey(0)
cv2.destroyAllWindows()
res = cv2.resize(img, (0, 0), fx=4, fy=4)#把狗变更成放大4.4
plt.imshow(res)
cv2.imshow("name", res)
cv2.waitKey(0)
cv2.destroyAllWindows()
res = cv2.resize(img, (0, 0), fx=1, fy=3)
plt.imshow(res)
cv2.imshow("name", res)
cv2.waitKey(0)
cv2.destroyAllWindows()08图片画像
import numpy as np
import cv2
# Create a black image
img=np.zeros((512,512,3), np.uint8)
# Draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(511,511),(255,0,0),1)#图 坐标 粗细 划线的
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)#矩形
cv2.circle(img,(447,63), 63, (0,0,255), -1)#画圆 图 圆心 半径 颜色 -1 为画圆面 正数为圆的粗细
cv2.ellipse(img,(256,256),(100,50),90,30,60,(0,255,0),-1)
#中心点的位置坐标 长轴和短轴的长度
# 起点轴角度 椭圆沿逆时针方向旋转的角度 椭圆沿顺时针方向旋转的角度 如果是0和360就是整个椭圆
# 画多䥨形
pts=np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
# pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(255,0,0),1)
# 3 # 䦈䭻 reshape 的第一个参数为-1, 䈗明䦈一维的伮度是根据后儑的维度的䕐算出来的。
# 如果第三个参数是 False虽我们得到的多䥨形是不侜合的虹卅尾不相
# 䦍虺。
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV Tuts!',(0,130), font, 1, (200,255,155), 2, cv2.LINE_AA)
# 你䌰绘制的文字
# 你䌰绘制的位置
# 字体类型 虹䧉䥶查看 cv2.putText() 的文档找到支持的字体虺
# 字体的大小
# 文字的一般属性如 剋色 虽 粗细 虽线条的类型等。为了更好看一点推荐使用
# linetype=cv2.LINE_AA。
cv2.imshow('image',img)
# cv2.imshow('image',pts)
cv2.waitKey(0)#等待
cv2.destroyAllWindows()#触发最后用9行代码做个人脸检测功能吧
# -*- coding: utf-8 -*-
#opencv导入的是cv2
import cv2
import face_recognition
#1读图
img = cv2.imread('../picture/zxc.jpg')#路径不可以中文
#获取人脸
locations = face_recognition.face_locations(img)
for top,rigth,bottom,left in locations:
cv2.rectangle(img,(left,top),(rigth,bottom),(0,0,255),2)#画框
#2展示
# cv2.putText(img, "handsome boy", (100,100-20), cv2.FONT_HERSHEY_COMPLEX, 2, (0,255,0), 3)#cv2.putText(img, str(i), (123,456)), font, 2, (0,255,0), 3)
#各参数依次是:图片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细
cv2.imshow('11',img)#中文乱码
#3等待结束
cv2.waitKey(0)#按任意键盘解释
#4销毁窗口
cv2.destroyAllWindows()捕获视频版人脸检测功能
pip install opencv-python face_recognition
import cv2
import face_recognition
#导入包
#创建视频捕获对象
vc = cv2.VideoCapture("../vdio/aa.mp4")#0为内置摄像头 #或者放摄像头路径
# vc = cv2.VideoCapture(0)#0为内置摄像头 #或者放摄像头路径
# 循环捕获视频的图片
while True:
ret,img = vc.read()
if not ret:
print('没有捕获到视频')
break
# 展示图片
locations = face_recognition.face_locations(img)
for top, rigth, bottom, left in locations:
cv2.rectangle(img, (left, top), (rigth, bottom), (0, 0, 255), 2)#画框
cv2.imshow('me',img)
if cv2.waitKey(1) != -1:
#关闭摄像头
vc.release()
cv2.destroyAllWindows()
break
# 等待键盘事件
# 关闭摄像头销毁川









