OpenCV (未完待续……)

目录

一、安装OpenCV

二、处理文件、摄像头和图形用户界面

1. 图像基本操作

2. 读取视频,打开摄像头

三、使用OpenCV处理图像

1. 色彩空间 

2. 傅里叶变换

3. 模糊滤波函数

4. 边缘检测

5. 自定义内核卷积

6. Canny边缘检测

7. 轮廓检测

8. 对象测量

四、深度估计与分割

1. GrabCut算法进行物体分割

2. 分水岭算法进行图像分割

五、图像基本操作

1. 缩放

2. 平移

3. 旋转

4. 仿射变换

5. 透视变换

6. Reference:

六、常用OpenCV API

cv.getTickCount() / cv.getTickFrequency()

cv2.kmeans()

cv2.PyrDown() / cv2.PyrUp()

cv2.split()

cv2.threshold()


 

 

一、安装OpenCV

pip install opencv-python

 

二、处理文件、摄像头和图形用户界面

1. 图像基本操作

(1) 加载图像

cv2.imread(filename, flags) -> retval

从文件加载图片,其中

  • filename - 加载文件的名称。
  • flags - 指明加载图片的色彩类型。

- CV_LOAD_IMAGE_ANYDEPTH: 如果设置,则在输入具有相应深度时返回16位/32位图像,否则返回8位图像。

- CV_LOAD_IMAGE_COLOR: 如果设置,总是把图像转换为有彩色的。

- CV_LOAD_IMAGE_GRAYSCALE: 如果设置,总是把图像转换为灰度图。

- >0 : 返回一张3通道的图片,即把原图作为RGB图像加载进来。

- =0 : 把原图作为灰度图像加载进来。

- <0 : 加载原图,不做任何改变。

(2) 创建窗口

cv2.namedWindow(winname, flags) -> None

创建一个窗口,其中

  • name - 窗口名称。
  • flags - 窗口的标签。

- WINDOW_NORMAL: 允许修改窗口大小。

- WINDOW_AUTOSIZE: 会自动根据图像大小,显示窗口大小,不能人为改变窗口大小。

- WINDOW_OPENGL: 根据OpenGL支持创建窗口。

注:如果同名的窗口已经存在,则这个方法什么也不做。

(3) 显示图像

cv2.imshow(winname, mat) -> None

在指定窗口显示图片,其中

  • winname - 窗口的名称。
  • mat - 将要显示的图片。

注:这个方法应该和waitKey()方法一起使用,后者表示图片显示多长时间,否则不会显示图片。waitKey(0)表示永久显示图片直到有键按下;waitKey(25)表示显示25ms,然后窗口会被关掉。(如果在一个循环里读取摄像头的,它会逐帧显示视频)

(4) 修改图像

cv2.cvtColor(src, code, dst, dstCn) -> dst

转换图片的彩色空间,其中

  • src - 输入图像,depth为:

- CV_8U,取值范围为0~255。

- CV_16U,取值范围为0~65535。

- CV_32F,取值范围为0~1。

  • dst - 输出图像,和输入图像有相同的depth。
  • code - 彩色空间转换code,见下表。
  • dstCn - 输出图像的通道数。如果为0,通道数由src和code自动派生。

注:RGB彩色空间在OpenCV中的颜色顺序为BGR。

(5) 保存图像

cv2.imwrite(filename, img, params) -> retval

保存图像,其中

  • filename - 文件名(包含扩展名,文件格式由扩展名指定)。
  • image - 要保存的图像。
  • params - 指明编码对。

- JPEG: 它可以是从0~100的质量(越高越好),默认值是95。

- PNG: 它可以是从0~9的压缩比(越高,文件越小,压缩时间更长),默认值是3

- PPM, PGM or PBM: 二进制格式的标签,0或者1,默认值是1。

使用此功能只能保存8位(或对于PNG、JPEG2000和TIFF的16位无符号)单通道或者3通道(BGR的通道顺序)的图像。如果格式、深度或者通道顺序不同,在保存前用convertTo()和cvtColor()方法转换。

(6) 销毁窗口

cv2.destroyAllWindows() -> None

销毁所有窗口.

import cv2 as cv2
src = cv2.imread("D:/Temp/11.jpg")
cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image", src)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

2. 读取视频,打开摄像头

(1) VideoCapture构造方法

cv2.VideoCapture() -> VideoCapture对象

cv2.VideoCapture(filename) -> VideoCapture对象

用视频文件构造VideoCapture对象,其中

  • filename - 初频文件的名字(eg. video.avi)或者图片序列(eg. img_%02d.jpg,这将会读取img_00.jpg, img_01.jpg, img_02.jpg, ...)

cv2.VideoCapture(device) -> VideoCapture对象

用摄像头的id来构造VideoCapture对象,其中

  • device - VideoCapture设备的id。如果只有一个摄像头连接,则传0。

(2) 视频帧左右调换,回正,镜像调换

cv2.flip(src, flipCode, dst) -> dst

围绕 垂直、水平或对角线 翻转二维数组。其中

  • src - 输入数组。
  • flipCode - 指明数组旋转的方式:

- 0表示绕x轴旋转;

- 正数(比如1)表示绕y轴旋转;

- 负数(比如-1)表示绕对角线y=x轴旋转。

  • dst - 输出数组,和输入数组有相同的大小和类型。
import cv2 as cv

camera = cv.VideoCapture("D:/Temp/python_project/test_data/video/snow.mp4")
while (True):
    ret, frame = camera.read()
    if ret:
        frame = cv.flip(frame, 1)
        cv.imshow("video", frame)
        cv.waitKey(10)
    else:
        break
cv.destroyAllWindows()
camera.release()

 

三、使用OpenCV处理图像

1. 色彩空间 

(1) 灰度色彩空间

(2) BGR色彩空间

类似于RGB色彩空间,就是颜色顺序不同。

(3) HSV

H: 色调(Hub),取值泛围是0~180

S: 饱和度(Saturation),取值泛围是0~255

V: 亮度(Value),取值泛围是0~255

 

绿

hmin

0

0

0

0

156

11

26

35

78

100

125

hmax

180

180

180

10

180

25

34

77

99

124

155

smin

0

0

0

43

43

43

43

43

43

43

smax

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值