CV5 numpy入门及图像的基本操作

一 访问和改变像素点的值
  • 单独对一个像素操作
# 通过行列坐标来访问像素值
# 定义图片的一个像素点
px = img[100,100]
# 打印出这个像素的BGR数值
print(px)
  • 仅访问像素点的单个通道
# 仅访问蓝色像素
blue = img[100,100,0]
print(blue)
  • 改变像素点的颜色
# 对像素点单独变色
img[100,100] = [255,255,255]
print(img[100,100])
  • 调用函数改变像素
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
二 访问图片属性
  • 返回图片大小(长宽像素点个数),颜色通道数
print(img.shape)
  • 返回总像素点个数
print(img.size)
  • 返回图像数据类型
print(img.dtype)
三 为图像设置边框(填充)

如果要在图像周围创建边框(如相框),则可以使用 cv.copyMakeBorder() 函数

对于这个函数

def copyMakeBorder(src: Any,
                   top: Any,
                   bottom: Any,
                   left: Any,
                   right: Any,
                   borderType: Any,
                   dst: Any = None,
                   value: Any = None) -> None
  1. src:需要填充的图像,即图像名
  2. top:图像上面填充边界的长度
  3. bottom:图像上下面填充边界的长度
  4. left:图像左面填充边界的长度
  5. right :图像右面填充边界的长度
  6. borderType:边界的类型

示例:

replicate = cv2.copyMakeBorder(img,300,300,300,300,cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,100,100,100,100,cv2.BORDER_REFLECT)
我们需重点讨论边界类型borderType
  • BORDER_REPLICATE

复制法,即复制最边缘的像素。例如:aaaa|abcdefg|ggggg

可以看到四边的像素点颜色都一样;原因是程序把最靠边的那个像素点都复制粘贴过去了

  • BORDER_REFLECT

反射法,即以最边缘的像素为对称轴。例如:fedcba|abcdefg|gfedec

可以看到,以边界为轴,各个像素点镜像复制过去

  • BORDER_REFLECT_101

反射法,也是最边缘的像素为对称轴,但与BORDER_REFLECT有区别。例如:fedcb|abcdefg|fedec

  • BORDER_WRAP

外包装法,即以图像的左边界与右边界相连,上下边界相连。例如:cdefgh|abcdefgh|abcdefg

  • BORDER_CONSTANT

常量法

完整代码:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
BLUE = [255,0,0]
img1 = cv.imread('opencv-logo.png')
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)
constant= cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_CONSTANT,value=BLUE)
plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落叶随峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值