【OpenCV】初探

一、OpenCV 安装与导入:

pip install opencv-python
import cv2

二、计算机图像:

        图像基本属性:

        在计算机中,所有的图像都由一个个的像素点组成,每个像素点都有自己的颜色,它们都非常的小,所以一般来说我们看到的高像素图片都是平滑而清晰的。图像都有宽度高度的属性,以决定图像尺寸大小。在 OpenCV 中,图像被储存为 ndarray 数组。

        灰度图像:

        灰度图像就是我们日常生活中所说的黑白图像,它只有两个属性:宽度和高度,因此它被储存为二维数组,形状与该图像形状相同,每个元素代表对应位置的像素,从0(黑色)到255(白色)对应着亮度。

        彩色图像:

        彩色图像除了高度和宽度外,还有一个属性:通道。彩色图像的通道固定有三个RGB, 分别对应光学三原色红(Red)、绿(Green)、蓝(Blue)。与绘画三原色类似,在计算机中,这三种颜色取不同的值叠加,可以组成所有的颜色。每一张彩色图片都可以看作是 RGB 三张图片的叠加,每张图片分管自己那部分颜色的数值(0~255)。因此,彩色图像在 OpenCV 中被储存为三维数组,其形状为[ height, weight, channel]。

        注意:OpenCV 读取图片的格式默认是 BGR 而非 RBG。

三、图像操作:

读取图像:

img = cv2.imread('path')
img = cv2.imread('path',cv2.IMGEAD_GRAYSCALE) # 彩色图像读为灰度图像

通过图像路径将图像以矩阵的形式存入变量中(img为变量名,自定义)

注意:路径中不要包含中文

展示图像:

cv2.imshow('name',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

name 为展示窗口的名字,img 为展示的图片

waitKey 中的参数为展示时间,单位毫秒,为0则是一直显示直至按任意按键,若无此代码,图片将一闪而过

destoryAllWindows 指令有或没有其实并不影响代码的效用,但是加了 destroyAllWindows 可以使窗口关闭的速度更快。

因为要多次调用这两条指令,所以我们通常将其定义为一个函数:

def cv_show(name,img):
    cv2.imshow(name,img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

保存图像:

cv2.imwrite('path',img)

 图像颜色通道提取与组合:

b,g,r = cv2.split(img)      # 分割颜色通道
img = cv2.merge((b,g,r))    # 组合颜色通道

图像属性:

img.shape # 图像形状(高、宽、通道)
img.size  # 图像大小
img.dtype # 数据类型

 填充:

        在进行图像卷积运算之前,我们常常要对图像进行填充操作。

img = copyMakeBorder(src, top, bottom, left, right, borderType)

        scr 为待填充的图像

        top、bottom、left、right 为各边要填充的尺寸

        borderType 为要填充的类型

borderType描述
cv2.BORDER_CONSTANT

纯色填充,可以通过改变 value 来改变填充颜色

cv2.BORDER_REPLICATE

将图像最外层像素复制

 

cv2.BORDER_WRAP

各边镜像后对位颠倒

cv2.BORDER_REFLECT

各边镜像,包括最外层像素

cv2.BORDER_REFLECT_101

各边镜像,不包括最外层像素

改变图像形状:

        将图片修改成指定的形状:

img = cv2.resize(scr,(weidth,height))

         按比例缩放图像宽与高的倍数:

img = cv2.resize(scr,(0,0),fx=...,fy=...)

 

四、图像数值运算:

简单加减常数运算规律:

        运用了 ndarray 数组的广播机制,正常计算得数 %256 得出最终数。

cv2.add():

        cv2.add(img1, img2),大于等于 255 的数字取 255,类似于增加图片的亮度。

图像融合:

        图像融合的原料必须是形状相同的图片,我们假设图片为输入项 x,每个图片都占有一定的权重 a,另有偏差值 b,则图像融合满足如下公式:res=a_1x_1+a_2x_2+b

        代码实现如下:

img = cv2.addWeighted(img_1, a_1, img_2, a_2, b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

六月渔烬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值