安装版本尽量选择 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()

效果图:
在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐