Opencv学习笔记(二)数字图像属性和像素操作

数字图像简介

数字图像:由像素组成,图像的信息是离散信号。
任意一副数字图像中的每个像素都具有特定的位置和幅值(像素值),位置和幅值(像素值)决定了图像的样貌。
数字图像包含RGB图像和灰度图像两类。RGB图像包含R 、G、B三个通道;灰度图只有一个通道,为 单通道图像。

图像基础操作

数字图像包含:行、列、通据类型和像素数目等属性。
img.shape:返回图像的行、列、通道个数,彩色图像通道数为3,灰度图像通道数为1;
img.dtype :返回图像数据类型;
img.size:返回图像像素数目。

图像像素获取。
img[i, j,k], i表示第几行,范围[0,行-1]; j表示第几列,范围[0,列-1]; k表示哪一个通道,取值为0(B)、1(G)、2(R)。也可以使用此方式对像素赋值修改。
代码

import cv2

# 读取图像
img = cv2.imread(r'F:\OPENCV\Opencv\opencv.jpeg', cv2.IMREAD_COLOR)
# 创建窗口
cv2.namedWindow('opencv', cv2.WINDOW_NORMAL)
# 设置窗口大小(窗口名称,(宽, 高))
cv2.resizeWindow('opencv', (350, 400))
# 显示图像
cv2.imshow('opencv', img)
# 获取图像属性()
print(img.shape)  # (610, 570, 3)
print(img.size)  # 1043100
print(img.dtype)  # uint8
# 获取第200行、第300列的像素值,RGB图像将返回BGR三个通道的像素值,灰度图像只返回一个像素值
pix = img[300, 200]
print(pix)  # [ 80 201  73]
# 获取第200行、第300B 通道的像素值
pix_c = img[300, 200, 0]
print(pix_c)  # 80
# 像素修改
img[300, 200] = [0, 0, 0]
# 保存图像
cv2.imwrite(r'F:\OPENCV\cv2.png', img)
# 等待时间
cv2.waitKey()
# 销毁指定窗口
# cv2.destroyWindow('opencv')
# 销毁窗口
cv2.destroyAllWindows()

另外,可使用numpy.array方法获取像素。
array.iterm()获取像素;
array.itemset()修改像素。
代码

# 使用numpy 获取像素并赋值
print(img.item(300, 200, 0))  # 80
img.itemset((300, 200, 0), 100)
print(img.item(300, 200, 0))  # 100

ROI获取

如果对图像的某一区域感兴趣,可使用切片方式获取。
代码

import cv2

# 读取图像
img = cv2.imread(r'F:\OPENCV\Opencv\opencv.jpeg', cv2.IMREAD_COLOR)
# ROI获取
roi = img[200:400, 300:500]
# 将roi区域拷贝到图像的某一个区域时,要确保这两个区域大小相同
# img[0:200, 0:200] = roi
# 创建窗口
cv2.namedWindow('opencv', cv2.WINDOW_NORMAL)
# 设置窗口大小(窗口名称,(宽, 高))
cv2.resizeWindow('opencv', (350, 400))
# 显示图像
cv2.imshow('opencv', roi)
# 等待时间
cv2.waitKey()
# 销毁窗口
cv2.destroyAllWindows()

ROI 结果
在这里插入图片描述

原始图片
在这里插入图片描述

参考文献

1.OpenCV3计算机视觉
2.OpenCV-Python官方教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值