Py-OpenCV学习记录2

图像操作

基本操作

        图像有他自己的属性,宽、高、通道数。其中宽(w)、高(h)是能够直接观察的到的,通道数则是呈现图像信息的属性。常见的通道如光学三原色的组合R、G、B三个通道,而事实上还存在其他的通道如RGBA、YCrCb、HSV等,每个通道的取值范围在0~255(28)。因此每一个彩色图像在被读取后存储在内存中的都是一个h×w×c的矩阵(当图像为灰色图像时通道数c为1)。

        基于这个特性便可以利用Numpy对图像进行简单的编辑。

1、访问部分图像

        在图像中无效的信息会很多,例如再识别车牌信息时所需要的仅仅时车牌牌子附近的一些图像,所以单独选择车牌这一块的进行识别而不是对整个图像进行识别。

        如上面的车牌信息是一个350×600×3的图片,因此筛选其车牌的位置在图中大概是在中间的位置,所以筛选高在120-299之间,宽在180-370之间,提取为im3并将其显示,便得到了只含有车牌信息的图片。

im3 = im1[120:200, 180:370]

        同时不仅可以选择部分图片,也可以通过直接修改像素的通道参数简单编辑图片颜色。将im3的红色通道R赋值0,便得到了下面这个图。

im3[:, :, 2] = 0

2、图像边界的制作

        以copyMakeBorder()函数实现

参数->

src为输入的图像,

top、bottom等都是在不同方向上拓宽边界的长度,

borderType为添加边框的类型,主要有以下五种:

cv.BORDER CONSTANT     --->   添加一个恒定的边框,value的值会作为颜色

cv.BORDER REFLECT     --->   将边框从原来的镜像过去,从最边缘开始镜像

cv.BORDER DEFAULT     --->   将最边缘的像素复制

cv.BORDER REPLICATE   --->   和REFLECT的类似,不过从边缘处向里一个像素格开始

cv.BORDER WRAP        --->   不太好解释,右侧的把左侧的复制过去了,同时左侧把右侧的复制过去

import cv2 
import numpy as np
from matplotlib import pyplot as plt 

#读取图片
im1 = cv2.imread('car_test2.jpg', flags=cv2.IMREAD_COLOR)

#尝试不同的边框
replicate = cv2.copyMakeBorder(im1, 40, 40, 40, 40, cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(im1, 40, 40, 40, 40, cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(im1, 40, 40, 40, 40, cv2.BORDER_REFLECT101)
wrap = cv2.copyMakeBorder(im1, 40, 40, 40, 40, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(im1, 40, 40, 40, 40, cv2.BORDER_CONSTANT, value= BLUE)

#用plt将其展示出来
plt.subplot(231),plt.imshow(im1),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('REFLECT101')
plt.subplot(235),plt.imshow(wrap, 'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant, 'gray'),plt.title('CONSTANT')

plt.show()

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小聪民

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

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

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

打赏作者

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

抵扣说明:

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

余额充值