入门案例

读取图片

本节我们将来学习,如何使用opencv显示一张图片出来,我们首先需要掌握一条图片读取的api

1
2
3
4
5
6
cv.imread("图片路径","读取的方式")
# 图片路径: 需要在工程目录中,或者一个文件的绝对路径
# 读取方式: 分别有如下三种:
    cv.IMREAD_COLOR : 以彩图的方式加载,会忽略透明度(默认方式)
    cv.IMREAD_GRAYSCALE: 以灰色图片方式加载
    cv.IMREAD_UNCHANGED: 直接加载,透明度会得到保留    

示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import cv2 as cv

# 读取图片 参数1:图片路径, 参数2:读取的方式 
img = cv.imread("img/lena.png",cv.IMREAD_COLOR)
# 显示窗口 参数1:窗口名称, 参数2:图片数据
cv.imshow("src",img)

# 让程序处于等待推出状态
cv.waitKey(0)
# 当程序推出时,释放所有窗口资源
cv.destroyAllWindows()

写入文件

刚才我们知道,如何读取文件,接下来,我们来学习如何将内存中的图片数据写入到磁盘中!

暂时我们还没有学习,如何直接代码构建一张图片,为了演示,我们先读取一张图片,然后再将它写入到文件中,后面我们会学习如何直接内存中构建一张图片

1
2
3
4
5
6
7
8
import cv2 as cv
img = cv.imread("img/lena.png", cv.IMREAD_UNCHANGED)

# 将图片写入到磁盘中,参数1: 图片写入路径,参数2: 图片数据
cv.imwrite("img/lena_copy.png",img)

cv.waitKey(0)
cv.destroyAllWindows()

理解像素

当我们将一张图片不断放大之后,我们就可以看到这张图片上一个个小方块,这里面的每一个小方块我们就可以称之为像素点! 任何一张图片,都是有若干个这样的像素所构成的!

操作像素

为了便于大家能够理解像素,我们现在手工来创建一张图片,例如我们使用np.zeros这样的函数可以创建一个30x40的矩阵,那个这个矩阵其实就可以表示一张图片,矩阵中每一个元素都是一个像素点,每个像素点又由BGR三部分组成,这里我们需要强调一下Opencv中,颜色空间默认是BGR不是RGB,所以我们想表示红色需要使用(0,0,255),想表示绿色需要(0,255,0)

下面我们就来操作图片,在图片的正中央增加一根红色的线!

这里我直接给出示例代码,然后我们来看一下运行效果吧!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import cv2 as cv
import numpy as np

# 构建一个空白的矩阵
img = np.zeros((30,40,3),np.uint8)

# 将第15行所有像素点全都改成红色
for i in range(40):
    # 设置第15行颜色为红色
    img[15,i] = (0,0,255)

# 显示图片
cv.imshow("src",img)

cv.waitKey(0)
cv.destroyAllWindows()

就这样我们的图片正中间就多了一根红色的线