zoukankan      html  css  js  c++  java
  • 图像上对的算术运算

    1、图像加法

    可以用函数cv2.add()将两幅图像进行加法运算,当然也可以直接使用numpy。

    res=img1+img2。两幅图像的大小,类型必须一致,或者第二个,图像可以使一个简单的标量值。

    注意:OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法
    是一种饱和操作,而 Numpy 的加法是一种模操作。
    x = np.uint8([250])
    y = np.uint8([10])
    print cv2.add(x,y) # 250+10 = 260 => 255
    [[255]]
    print x+y # 250+10 = 260 % 256 = 4
    [4]

    opencv的效果会好一些

    2、图像混合

    其实也是加法,但是这个要设置权重,两个图片的权重加起来必须为1。

    用函数cv2.addWeighted()

    import cv2
    import numpy as np
    img1=cv2.imread('ml.png')
    img2=cv2.imread('opencv_logo.jpg')
    dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)
    cv2.destroyAllWindow()

    3、按位运算

    这里包括的按位操作有:AND,OR,NOT,XOR 等。当我们提取图像的
    一部分,选择非矩形 ROI 时这些操作会很有用(下一章你就会明白)。下面的
    例子就是教给我们如何改变一幅图的特定区域。
    我想把 OpenCV 的标志放到另一幅图像上。如果我使用加法,颜色会改
    变,如果使用混合,会得到透明效果,但是我不想要透明。如果他是矩形我可
    以象上一章那样使用 ROI。但是他不是矩形。但是我们可以通过下面的按位运
    算实现
    import cv2
    import numpy as np
    # 加载图像
    img1 = cv2.imread('roi.jpg')
    img2 = cv2.imread('opencv_logo.png')
    # I want to put logo on top-left corner, So I create a ROI
    rows,cols,channels = img2.shape
    roi = img1[0:rows, 0:cols ]
    # Now create a mask of logo and create its inverse mask also
    img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
    ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY)
    mask_inv = cv2.bitwise_not(mask)
    # Now black-out the area of logo in ROI
    # 取 roi 中与 mask 中不为零的值对应的像素的值,其他值为 0 # 注意这里必须有 mask=mask 或者 mask=mask_inv, 其中的 mask= 不能忽略
    img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
    # 取 roi 中与 mask_inv 中不为零的值对应的像素的值,其他值为 0。
    # Take only region of logo from logo image.
    img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
    # Put logo in ROI and modify the main image
    dst = cv2.add(img1_bg,img2_fg)
    img1[0:rows, 0:cols ] = dst
    cv2.imshow('res',img1)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
  • 相关阅读:
    access导入报错 请求筛选模块被配置为拒绝超过请求内容长度的请求
    win10装回win7。PE下把原来的系统盘格掉,再安装hdd,重启就好了
    sql语句Order by 报错列名不明确
    C#字符串长度判断
    Struts2中数据封装机制
    Struts2中的页面跳转
    Struts2访问Servlet API的三种方式
    Struts2的动态Action实现
    Struts2基本概念
    javaweb开发之EL表达式
  • 原文地址:https://www.cnblogs.com/h694879357/p/12271550.html
Copyright © 2011-2022 走看看