zoukankan      html  css  js  c++  java
  • OpenCV-Python教程8-图像混合

    一、图片相加

    要叠加两张图片,使用cv2.add(),相加两幅图片的形状(高度、宽度、通道数)必须相同。numpy中可以直接用res = img1 + img2相加。但是两者的结果并不相同

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

    如果是二值化图片(只有0和255两种值),两者结果是一样的。

    二、图像混合

    图像混合cv2.addWeighted()也是一种图片相加的操作,只不过两幅图片的权重不一样,γ相当于一个修正值:

    dsα × imgβ × imgγ

     

    img1 = cv2.imread('lena_small.jpg')
    img2 = cv2.imread('opencv-logo-white.png')
    
    res = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
    cv2.imshow('res', res)
    cv2.waitKey(0)

    当α和β都等于1时,就相当于图片相加

    三、按位操作

    如果将两幅图片直接相加会改变图片的颜色,如果用图像混合,则会改变图片的透明度,所以我们需要按位操作。首先需要了解一下掩膜(mask)这个概念

    掩膜(mask):用一幅二值化图片对另外一幅图片进行局部遮挡,如下图:

    实际上就是把原图中要放logo的区域抠出来,在把logo放进去就行了。

    img1 = cv2.imread('lena.jpg')
    img2 = cv2.imread('opencv-logo-white.png')
    
    # 把logo放在左上角,所以我们只关心这一块区域
    rows, cols = img2.shape[:2]
    roi = img1[:rows, :cols]
    
    # 创建掩膜
    img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
    ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
    mask_inv = cv2.bitwise_not(mask)
    
    # 保留除logo外的背景
    img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
    dst = cv2.add(img1_bg, img2)  # 进行融合
    img1[:rows, :cols] = dst     # 融合后放在原图上
    
    cv2.imshow('dst', dst)
    cv2.waitKey(0)
    cv2.imwrite('dst.jpg', dst)

    小结

    1. cv2.add()用来叠加两幅图片,cv2.addWeighted()也是叠加两幅图片,但两幅图片的权重不一样

    2. cv2.bitwise_and()cv2.bitwise_not()cv2.bitwise_or()cv2.bitwise_xor()分别按位与、非、或、异或运算。掩膜是用来对图片进行全局或局部的遮挡。

    参考地址:https://tianchi.aliyun.com/course/courseConsole?courseId=40998&chapterIndex=1&sectionIndex=1

  • 相关阅读:
    google
    html页面清除缓存
    EF中使用SQL语句或存储过程
    在存储过程中编写正确的事务处理代码
    .Net中Math.Round与四舍五入
    WebService中实现上传下载文件
    tony_linux下网站压力测试工具webbench
    把Nginx加为系统服务(service nginx start/stop/restart)
    Nginx+Tomcat+Keepalived+Memcache 负载均衡动静分离技术
    python学习笔记(1)--遍历txt文件,正则匹配替换文字
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10315855.html
Copyright © 2011-2022 走看看