访问图像数据
引言:
由于图像在计算机中的表示是一个矩阵,因此我们时不时需要访问或修改矩阵中的数据,实现基本的图像处理。同时Python提供了一个开源计算库:numpy,可以非常方便地用于矩阵计算。
# -*- coding:utf-8 -*-
import cv2
# imread函数用于读入一幅图像,该函数的返回值是一个矩阵
image = cv2.imread('images/test.jpg')
# numpy.array提供了item()函数,可以访问矩阵中特定位置的特定通道的像素值
# 函数有三个参数:x, y 和通道
print(image.item(150, 120, 0)) # 输出一个整数,我这里是216
# itemset()函数可设定像素值
# 函数有两个参数:一个三元组(x, y 和通道)和要设定的像素值
image.itemset((150, 120, 0), 255)
print(image.item(150, 120, 0)) # 输出新设定的值,255
cv2.waitKey(0)
程序的运行结果如下:
————————————————————————–
将指定通道(B、G、R中的G)的值置为0
# -*- coding:utf-8 -*-
import cv2
image = cv2.imread('images/test.jpg')
cv2.namedWindow("Image")
# 获得所有行和列的全部像素,1是B、G、R中G的下标
image[:, :, 1] = 0 # B、G、R中的G
cv2.imshow("Image", image)
cv2.waitKey(0)
程序的运行结果如下:
————————————————————————–
将感兴趣区域涂黑
import cv2
image = cv2.imread('images/test.jpg')
cv2.namedWindow("Image")
# 我们设置(0,0)到(100,100)的正方形区域为感兴趣区
roi = image[0:100, 0:100]
roi[:] = 0 #将roi区域内的全部像素设置为0,0表示黑色
cv2.imshow("Image", image)
cv2.waitKey(0)
程序的运行结果如下,我们可以看到(0,0)到(100,100)的正方形区域被置为黑色:
————————————————————————–
复制感兴趣区域
# -*- coding:utf-8 -*-
import cv2
image = cv2.imread('images/test.jpg')
cv2.namedWindow("Image")
roi = image[0:100, 0:100] #设置感兴趣区域
# 将感兴趣区域的像素复制给(200, 200)到(300, 300)的正方形区域
# 两个区域的大小需要相同,大小不仅包括长宽,还要求通道数也相等
image[200:300, 200:300] = roi
cv2.imshow("Image", image)
cv2.waitKey(0)
程序的运行结果如下,我们可以看到(200,200)到(300,300)的正方形区域 与 (0,0)到(100,100)的正方形区域具有相同的像素值:
下一节,将介绍使用OpenCV进行图像的边缘检测