[OpenCV] 机器学习 Day1 - 霜冷的秘密基地

[OpenCV] 机器学习 Day1

机器学习 0 评

正在学习机器视觉相关知识,很多都要基于Opencv实现,故有此记录
官方文档:https://opencv-python-tutroals.readthedocs.io/en/latest/

前置库

opencv-python=4.5.4-dev
matplotlib=3.5.0
numpy=1.21.4

导入库
import cv2.cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

简单图像处理

图像像素存储形式

  • 对于只有黑白颜色的灰度图,为单通道,一个像素块对应矩阵中一个数字,数值为0到255, 其中0表示最暗(黑色) ,255表示最亮(白色)
  • 对于采用RGB模式的彩色图片,为三通道图,Red、Green、Blue三原色,按不同比例相加,一个像素块对应矩阵中的一个向量,如[24,180, 50],分别表示三种颜色的比列, 即对应深度上的数字

图像的读取与写入

import cv2

# 获取图片像素数组对象[h,w,c]
img = cv2.imread(img_path, flag)
 - path:图片路径
 - flag:cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入1
         cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入0
         cv2.IMREAD_UNCHANGED,读取图像,包括其alpha通道,也可以传入-1

# 创建窗口并显示图像
cv.imshow(window_name, img)
 - window_name:指定创建的窗口名称
 - img:图片对象

# 键盘绑定事件,
cv.waitKey(wait_ms)
 - wait_ms:等待时间(ms), 0代表按下任意键终止

# 关闭窗口
cv.destroyAllWindows(window_name)
 - window_name:关闭的窗口名称

# 图像保存
imwrite(img_path_name,img,params)
    img_path_name:保存的文件名
    img:文件对象
    params:参数列表

[CODE]代码示例

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np

img = cv.imread('1.jpg', cv.IMREAD_GRAYSCALE)
# [cv.IMWRITE_JPEG_QUALITY, 10] 参数列表,表示对jpg图片压缩质量,范围0-100,越大质量越高
# [cv.IMWRITE_PNG_COMPRESSION] 需要注意的是,对png图片的压缩,范围0-9,越小质量越好;png有透明参数
cv.imwrite('1_mass_10.jpg', img, [cv.IMWRITE_JPEG_QUALITY, 10])
print(img)

cv.imshow('IMG', img)
cv.waitKey(0)
cv.destroyAllWindows()

简单视频处理

OpenCV提供了操作视频的接口类VideoCapture,VideoCapture类可以从文件或者摄像设备中读取视频。VideoCapture提供了常用的三种构造函数:

VideoCapture::VideoCapture()

VideoCapture::VideoCapture(int device)

VideoCapture::VideoCapture(const string& filename);

说明:

第一个是默认无参构造函数

第二个中参数device指定要打开的摄像头设备

第三个构造函数中filename 是指要打开的视频文件路径以及名称;

[CODE]示例代码

vc = cv.VideoCapture('Gura.mp4')

# 循环读取帧
while vc.isOpened():
    ret, frame = vc.read()
    # 读取完视频帧后退出
    if frame is None:
        break
    # 颜色转换 - COLOR_BGR2GRAY 灰色
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    print(gray, end='')
    cv.imshow('vc', gray)
    # 每隔10ms读取一帧,ESC退出
    if cv.waitKey(10) & 0xFF == 27:
        break
vc.release()

图像处理 - 像素操作

img = cv.imread('2.jpg', 1)
# 读取img中100,100像素点的brg,返回值为元组
(b, g, r) = img[100, 100]
print(b, g, r)

# 写入[y,x] ->(10, 100) - (110, 200)
for i in range(0, 101):
    for j in range(0, 101):
        img[10 + i, 100 + j] = (255, 0, 0)  # 写入蓝色正方形

cv.imshow('IMG', img)
cv.waitKey(0)
cv.destroyAllWindows()

[效果]
demo5.png

[Pjax] Typecho局部加载网页
快来做第一个评论的人吧~
0:00