OpenCV自学笔记2:访问图像数据

来源:互联网 发布:手机版电子杂志软件 编辑:程序博客网 时间:2024/06/02 03:14

访问图像数据

引言:
由于图像在计算机中的表示是一个矩阵,因此我们时不时需要访问或修改矩阵中的数据,实现基本的图像处理。同时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)) # 输出新设定的值,255cv2.waitKey(0)

程序的运行结果如下:

这里写图片描述

————————————————————————–

将指定通道(B、G、R中的G)的值置为0

# -*- coding:utf-8 -*-import cv2image = cv2.imread('images/test.jpg')cv2.namedWindow("Image")# 获得所有行和列的全部像素,1是B、G、R中G的下标image[:, :, 1] = 0 # B、G、R中的Gcv2.imshow("Image", image)cv2.waitKey(0)

程序的运行结果如下:

这里写图片描述

————————————————————————–

将感兴趣区域涂黑

import cv2image = 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 cv2image = 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进行图像的边缘检测

这里写图片描述