- 环境的配置和模块的导入
- 读取图像和显示图像
- 视频的读取
- 对图片进行操作
环境的配置和模块的导入
我使用的ide是pycharm,原因是自动补全功能和debug功能。在打代码之前要安装两个必要的python模块opencv-python(基本环境)和opencv-contrib-python模块(额外拓展包)
直接在cmd安装pip install opencv-python,pip install opencv-contrib-python这样装得到的是最新的版本号,也可以装特定的版本
读取图像和显示图像
先导入模块import cv2
读取图片img=cv2.imread("文件路径",读取格式)
其中读取格式有cv2.IMREAD_COLOR和cv2.IMREAD_GRAYSCALE两种,分别代表彩色和灰度图像
创建窗口:1,可以直接创建
cv2.namedWindow("窗口名",窗口大小)
2,可以在显示图片中创建
cv2.imshow("窗口名”,文件变量)
图片逗留时间
cv2.waitKey(0)
当括号内为零时,任意键退出。当为其他数字时,为图片逗留时间,以毫秒计算
退出窗口
cv2.destroyAllWindows()
括号没内容时,可以删除任何我们建立的窗口。也可以在括号内输入我们想删除的窗口名
图片的保存
cv2.imwrite("文件名“,图片变量”)
图片常见信息的读取
文件的大小和通道数文件名.shape
图片类型文件名.dtype
视频的读取
视频的读取实际上时对视频中没一帧的图片进行读取,所以在读取到每一帧的图片后,操作和图片的操作一样的了
读取视频
vc = cv2.VideoCapture('文件路径或设备名')
括号为0为电脑摄像头,为其他的我没试过
然后要检查是否成功获得视频
vc.isOpen()返回布尔值
判断返回值
if vc.isOpen():
open,frame=vc.read()
else:
open=Flase
vc.read()获得第一帧的数据,一个数据是布尔值,一个是获得每一帧的图片
通过循环获得每一帧的图像
while open:
ret,frame=vc.read()
if frame==None:
break
if ret==Ture:
gray=cv2.cvtColor(文件,要更换的效果)#图像效果变换
cv2.imshow('窗口’,文件变量名)
if cv2.waitKey(10)&0xFF==27:
break
vc.release()
cv2.destroyAllWindws()
因为是视频播放,所以要设定Esc退出,vc.release()不懂这句意思,猜是释放缓存的意思。视频的保存为vc.VideoWrite('文件名‘,文件变量名,编码格式,帧数,大小,色度)
图片的截取
利用切片的方式
img=cv2.imread('cat.jpg')
new=img[0:50,0:100]
颜色通道的提取
b,g,r=cv2.split(img)
颜色融合
img=cv2.merge((b,g,r))
边界填充
cv2.copyMakeBorder(img,top_size,botton_size,left_size,right_size,borderType=)
•BORDER_REPLICATE:复制法,也就是复制最边缘像素。
•BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
•BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
•BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
•BORDER_CONSTANT:常量法,常数值填充。
数值计算
img_cat2= img_cat +10 直接相加,rgb加10
(img_cat + img_cat2) >255从零开始
cv2.add(img_cat,img_cat2) >5时为255
图像融合
cv2.resize(img_dog, (500, 414))
cv2.resize(img, (0, 0), fx=4, fy=4) x轴y轴的倍数
长宽变形,因为图片相等的图片才能融合
cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)
0.4,0.6为权重,0为亮度值