OpenCV (一)基于Python
文章目录
安装版本尽量选择 3.4.1 .15,因为3.4.2有一些功能已经申请了专利了。没办法免费用了。
一.安装opencv
pip install opencv-python
pip install opencv-contib-python # 这个是相当于扩展包
二.图像的基本操作
2.1原理
0-255 表示像素点的亮度:,RGB 三个通道上的值,表示的是三个通道的亮度。灰度图是一个通道
如果一个彩色图像的大小是 500 *500 , 那么他就表示为 【500,500,3】
2.2读取和保存图片代码
import cv2 #读取bgr 的格式的图
import matplotlib.pyplot as plt
import numpy as np
#读取图像信息
img=cv2.imread('./material/a.jpg')
#可以打印出来瞧瞧,看是什么样的形状
print(img)
print(img.shape)
# 输出结果是(300, 530, 3)
# 表示的是 h w c ,只不过他不是 RGB,而是BGR
# 展示图像信息
cv2.imshow("自己指定的名字",img)
cv2.waitKey(0)
# 表示等待时间是由自己确定的
# 已毫秒为单位
cv2.destroyAllWindows() #按电脑上任意键消失
#可以自定义一个方法,用来显示图片
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
## 直接读取灰度图
img=cv2.imread('./material/a.jpg',cv2.IMREAD_GRAYSCALE)
print('**********')
print(img.shape)
cv2.imshow("自己指定的名字",img)
cv2.waitKey(0)
# 输出的结果(300, 530)
# 保存图像
cv2.imwrite('./material/test01.jpg',img)
三.视频的基本操作
1.原理
其实视频也是读进去的一张张的图片,对张图片进行处理,到最后的结果就是展示出来的,对整个视频的处理
2.视频读取和展示的代码
import cv2 #读取bgr 的格式的图
import matplotlib.pyplot as plt
import numpy as np
# cv2.VideoCapture 可以捕获摄像头,用数字来控制不同的设备。例如0.1.
# 如果是 视频文件的话,直接指定好路径就好了
# 读取视频
vc=cv2.VideoCapture('./material/video/a.mp4')
#检查是否打开正确
if vc.isOpened():
open,frame=vc.read()
# open是 bool 值,如果有就是true
#frame 相当于就是读进来的一张图片
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)
if cv2.waitKey(10) & 0xFF==27:
break
vc.release()
cv2.destroyAllWindows()
四.其他基本操作
1.截图(感兴趣的区域)
# 截取图像,感兴趣区域
img=cv2.imread('./material/image/b.jpg')
print(img.shape)
# 输出:(312, 500, 3)
cat=img[0:200,0:380]
cv_show('cat',cat)
效果图:就剩下原来的一半了:
2.边界填充
在特征提取的环节一般需要,比如是在一些卷积操作中。
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./material/image/b.jpg')
# 上下左右要填充的尺寸
top_size,bottom_size,left_size,right_size=(500,500,50,50)
# 填充,最后指定填充的方法
replicate=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
# 行数、列数和索引值,
plt.subplot(121),plt.imshow(img,'gray'),plt.title('ORIGINAL')
plt.subplot(122),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
#展示出来
plt.show()
效果图:
各种填充方法的区别:
最后使用参数填充的时候,要指定填充的值,一般是像素的值。
3.改变形状
1.代码
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./material/image/b.jpg')
# 查看形状
print(img.shape)
#(312,500,3)
# 行数、列数和索引值,
replicate=cv2.resize(img,(300,100))
# 按照比例改变形状
res1=cv2.resize(img,(0,0),fx=2,fy=4)
res2=cv2.resize(img,(0,0),fx=4,fy=2)
plt.subplot(221),plt.imshow(img,'gray'),plt.title('aa')
plt.subplot(222),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(223),plt.imshow(res1,'gray'),plt.title('REPLICATE')
plt.subplot(224),plt.imshow(res2,'gray'),plt.title('REPLICATE')
#展示出来
plt.show()
效果图: