zoukankan      html  css  js  c++  java
  • 【python-opencv】图像上的算术运算

    1、加法运算

    您可以通过OpenCV函数cv.add()或仅通过numpy操作res = img1 + img2添加两个图像。两个图像应具有相同的深度和类型,或者第二个图像可以只是一个标量值。

    注意 OpenCV加法和Numpy加法之间有区别。OpenCV加法是饱和运算,而Numpy加法是模运算。

    import cv2 as cv
    import numpy as np
    x=np.uint8([250])
    y=np.uint8([10])
    cv.add(x,y) # 250+10 = 260 => 255

    输出:array([[255]], dtype=uint8)

    x+y # 250+10 = 260 % 256 = 4

    输出:array([4], dtype=uint8)

    当添加两个图像时,它将更加可见。OpenCV功能将提供更好的结果。因此,始终最好坚持使用OpenCV功能。

    2、图像融合

    这也是图像加法,但是对图像赋予不同的权重,以使其具有融合或透明的感觉。

    img1 = cv.imread('ml.png')
    img2 = cv.imread('opencv-logo.png')
    dst = cv.addWeighted(img1,0.7,img2,0.3,0)
    cv.imshow('dst',dst)
    cv.waitKey(0)
    cv.destroyAllWindows()

    会给每一个图像乘以其权重。

    3、按位运算

    这包括按位 AND ORNOT 和 XOR 操作。它们在提取图像的任何部分、定义和处理非矩形 ROI 等方面非常有用。 下面我们将看到一个例子,如何改变一个图像的特定区域。 我想把 OpenCV 的标志放在一个图像上面。如果我添加两个图像,它会改变颜色。如果我混合它,我得到一个透明的效果。但我希望它是不透明的。如果是一个矩形区域,我可以使用 ROI,就像我们在上一章中所做的那样。但是 OpenCV 的 logo 不是长方形的。所以你可以使用如下的按位操作来实现:

    我想在图像上方放置OpenCV徽标。如果添加两个图像,它将改变颜色。如果混合它,我将获得透明效果。但我希望它不透明。如果是矩形区域,则可以像上一章一样使用ROI。但是OpenCV徽标不是矩形。因此,您可以按如下所示进行按位操作:

    # 加载两张图片
    img1 = cv.imread('messi5.jpg')
    img2 = cv.imread('opencv-logo-white.png')
    # 我想把logo放在左上角,所以我创建了ROI
    rows,cols,channels = img2.shape
    roi = img1[0:rows, 0:cols ]
    # 现在创建logo的掩码,并同时创建其相反掩码
    img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
    ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)
    mask_inv = cv.bitwise_not(mask)
    # 现在将ROI中logo的区域涂黑
    img1_bg = cv.bitwise_and(roi,roi,mask = mask_inv)
    # 仅从logo图像中提取logo区域
    img2_fg = cv.bitwise_and(img2,img2,mask = mask)
    # 将logo放入ROI并修改主图像
    dst = cv.add(img1_bg,img2_fg)
    img1[0:rows, 0:cols ] = dst
    cv.imshow('res',img1)
    cv.waitKey(0)
    cv.destroyAllWindows()

    参考:http://woshicver.com/FourthSection/3_2_%E5%9B%BE%E5%83%8F%E4%B8%8A%E7%9A%84%E7%AE%97%E6%B3%95%E8%BF%90%E7%AE%97/

  • 相关阅读:
    发送trim值
    关一些时钟
    不同频率下的pwm配置
    c#鼠标在控件上面,然后显示文字
    C#通过文件路径截取对应的文件夹路径
    C#随机生成连续多少个十六进制数字
    C#检测串口被拔掉等一些触发事件合集
    c#按键Up和Down对Textbox的内容加1减1
    软件架构师工作历程
    软件架构阅读6
  • 原文地址:https://www.cnblogs.com/xiximayou/p/13111762.html
Copyright © 2011-2022 走看看