OpenCV必备知识 -入门篇

121 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

OpenCV简介

基础知识:

  • 计算机采用0/1编码的系统,数字图像也是利用0/1来记录信息
  • 我们平常接触的图像都是8位数图像,包含0~255灰度,其中0代表最黑,255表示最白

图像的分类

二值图像

一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储

灰度图

每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)

彩色图

每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255),RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像


图像的基础操作

读取图像:cv2.imread

cv2.imread(‘filepath’,flags)

参数解析:

  • 要读取的图像

  • 读取方式的标志

    • cv.IMREAD_COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数

    • cv.IMREAD_GRAYSCALE:以灰度模式加载图像

    • cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式

      可以使用1、0或者-1来替代上面三个标志

使用例子:

import cv2 as cv
img1 = cv.imread('test.png',1)
img2 = cv.imread('test.png',0)
img3 = cv.imread('test.png',-1)
cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.imshow("img3", img3)
cv.waitKey(0)

image-20220911163950832


显示图像cv2.imshow

cv2.imread(‘filepath’,flags)

参数:

  • 显示图像的窗口名称,以字符串类型表示
  • 要加载的图像

注意:在调用显示图像的API后,要调用cv.waitKey()给图像绘制留下时间,否则窗口会出现无响应情况,并且图像无法显示出来


保存图像 cv2.imwrite

参数:

  • 文件名,要保存在哪里
  • 要保存的图像