OpenCV学习笔记(二)获取图像信息

获取并修改像素值

  • 目标:读取一副图像,根据像素的行和列的坐标获取它的像素值。
  • 对于RGB图像而言,返回RGB的值,对于灰度图则返回灰度值。
#
import cv2
import numpy as np



img = cv2.imread('123.jpg', 1)

#获取图像的长,宽及通道数
#方法一:
w, h, c = np.shape(img)
print(w, h, c)
#方法二:
print(img.shape)

#获取某个通道对应坐标的像素值
pixel = img[100, 100, 0]
print(pixel)

#修改对应坐标下的像素值
img[101,101]=[255,255,255]
print(img[101,101])

获取图像属性

  • 图像的属性包括:行,列,通道,图像数据类型,像素数目等
  • 如果图像是灰度图,返回值仅有行数和列数,所以通过检查返回值可以判断是灰度图还是彩色图
#获取图像的长,宽及通道数
#方法一:
w, h, c = np.shape(img)
print(w, h, c)
#方法二:
#img.shape可以获得图像的形状,返回值是一个包含行数,列数,通道数的元组
print(img.shape)
  • img.size可以返回图像的像素数目
  • 像素数目为图像的长 x 宽 x 通道数
img = np.zeros((512, 512, 3), np.uint8)

print(img.shape)
print(img.size)
--------------------------
(512, 512, 3)
(786432)

img.dtype返回图像的数据类型

print(img.dtype)
--------------------------
uint8

图像ROI(region of interest, 感兴趣区域)

  • 对图像的特定区域操作。ROI是使用numpy索引来获得的。
#这里引入一张长512,宽512,通道数为3的图片
img = cv2.imread('1.jpg', 1)

#将图像对应范围内的像素定义为一个新的图像变量
img1 = img[50:100, 50:100]
#将原图某一范围内的像素用刚才定义的图像进行替换
#注意:两者替换范围(长,宽)需一致,否则会因为无法替换而报错
img[60:110, 70:120] = img1

拆分及合并图像通道

r,g,b=cv2.split(img)#拆分
img=cv2.merge(r,g,b)#合并

b=img[:,:,0]#拆分b通道,用于得到单个通道

假如想使所有红色通道值都为0,不必拆分再赋值,可以使用numpy索引,这样更快

img[:,:,2]=0

为图像扩边(填充)

  • 想为图像周围建一个边可以使用cv2.copyMakeBorder()函数。这经常在卷积运算或0填充时被用到。具体参数如下:
  • src输入图像
  • top,bottom,left,right对应边界的像素数目
  • borderType要添加哪种类型的边界:
  • cv2.BORDER_CONSTANT添加有颜色的常数值边界,还需要下一个参数(value)
  • cv2.BORDER_REFLIECT边界元素的镜像。例如:fedcba | abcdefgh | hgfedcb
  • cv2.BORDER_101或者cv2.BORDER_DEFAULT跟上面一样,但稍作改动,例如:gfedcb | abcdefgh | gfedcba
  • cv2.BORDER_REPLICATE复后一个元素。例如: aaaaaa| abcdefgh|hhhhhhh
    例子,将图像外10个像素厚度边界填充为红色
import cv2
img= cv2.imread('123.jpg', 1)

red = [255, 0, 0]

constant = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_CONSTANT,value=red)
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('constant')
plt.show()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值