目录
  • 1.图像加法
    • 1.1Numpy加法
    • 1.2OpenCV加法
  • 2.图像融合
    • 3.改变颜色空间

      1.图像加法

      图像加法有两种方式,一种是通过 Numpy 直接对两个图像进行相加,另一种是通过 OpenCV 的 add() 函数进行相加。

      不管使用哪种方法,相加的两个图像必须具有相同的深度和类型,简单理解就是图像的大小和类型必须一致。

      1.1Numpy加法

      Numpy 的运算方法是: img = img1 + img2 ,然后再对最终的运算结果取模。

      • 当最终的像素值 <= 255 时,则运算结果直接为 img1 + img2 。
      • 当最终的像素值 > 255 时,则运算的结果需对 255进行取模运算。

      1.2OpenCV加法

      OpenCV 的运算方式是直接调用 add() 函数进行的,这时的运算方式是饱和运算。

      • 当最终的像素值 <= 255 时,则运算结果直接为 img1 + img2 。
      • 当最终的像素值 > 255时,这时则是饱和运算,结果固定为 255 。

      两种加法方式对应的示例如下:

      import cv2 as cv
      # 读取图像
      img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
      test = img
      # Numpy 加法
      result1 = img + test
      # OpenCV 加法
      result2 = cv.add(img, test)
      # 显示图像
      cv.imshow("img", img)
      cv.imshow("result1", result1)
      cv.imshow("result2", result2)
      
      # 等待显示
      cv.waitKey()
      cv.destroyAllWindows()

      python opencv 图像处理之图像算数运算及修改颜色空间

      可以看到,使用 Numpy 取模加法的图片整体更偏蓝色,而使用 OpenCV 饱和运算的加法,整体颜色更偏白色。

      2.图像融合

      图像融合其实也是一种图像加法,但是它和图像加法不同的是对图像赋予不同的权重,可以使图像具有融合或者透明的感觉。

      • 图像加法: img = img1 + img2
      • 图像融合: img = img1 * alpha + img2 * beta + gamma

      图像融合用到的函数为 addWeighted() 具体如下:

      dst = cv.addWeighter(img1, alpha, img2, beta, gamma)
      dst = img1 * alpha + img2 * beta + gamma

      这里的 alpha 和 beta 都是系数,而 gamma 则是一个亮度调节量,不可省略。

      下面这个示例中,有一张地铁的图片,用这张图片和小姐姐做一个图像融合的案例:

      img1 = cv.imread(file, cv.IMREAD_UNCHANGED)
      img1=cv.resize(img1,(1000,1000))
      img2 = cv.imread(file1, cv.IMREAD_UNCHANGED)
      img2=cv.resize(img2,(1000,1000))
      # 图像融合
      img = cv.addWeighted(img1, 0.4, img2, 0.6, 10)
      # 显示图像
      cv.imshow("img1", img1)
      cv.imshow("img2", img2)
      cv.imshow("img", img)
      
      # 等待显示
      cv.waitKey()
      cv.destroyAllWindows()

      注意:这里如果二个图像像素不同要更改为同一像素下cv.resize(img,(width,hegiht))

      python opencv 图像处理之图像算数运算及修改颜色空间

      python opencv 图像处理之图像算数运算及修改颜色空间

      3.改变颜色空间

      OpenCV 中有超过150种颜色空间转换方法。我们先介绍两种最常用的: BGR <-> 灰度 和 BGR <-> HSV 。

      对于改变颜色空间,我们使用 cvtColor(input_image, flag) 函数,其中的 flag 为转换的类型。

      一些常见的 flag 值:

      # BGR 转 灰度
      cv.COLOR_BGR2GRAY
      # BGR 转 HSV
      cv.COLOR_BGR2HSV
      # BGR 转 RGB
      cv.COLOR_BGR2RGB
      # 灰度 转 BGR
      cv.COLOR_GRAY2BGR

      我们使用 cvtColor() 这个函数将小姐姐转化成灰度图像,示例如下:

      import cv2 as cv
      # 读取图像
      img = cv.imread("data.jpg", cv.IMREAD_UNCHANGED)
      # 图像类型转换
      result = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
      
      # 图像展示
      cv.imshow("img", img)
      cv.imshow("result", result)
      
      # 等待显示
      cv.waitKey()
      cv.destroyAllWindows()

      python opencv 图像处理之图像算数运算及修改颜色空间

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。