• 06. 图像基本运算和位运算


    图像基本运算和位运算

    • bitwise_or 或操作
    • bitwise_and 与操作
    • bitwise_not 非操作
    • bitwise_xor 异或操作,说明:四个操作里面存在一个mask掩码可选参数
    • add 每个像素相加,超出255的数字会被截断,相当于 % 256
    • addWeighted 两张图按比例进行叠加
    • subtract 减法操作,对应位置的元素相减,减完小于0,统一变为0
    • multiply 乘法操作,
    • divide 除法操作
    • resize 图像大小操作,可以指定插值方式4种:以cv2.INTER_开头
    • np.array(xxx).sizeof() 数组占用空间大小
    • cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 图片色彩转变,这个示例是转为黑百图(灰度图)

    示例:在一个图片上绘制logo图标,主要技术点:使用mask掩码,对位运算的灵活运用

    import cv2
    import numpy as np
    
    bg = cv2.imread('./images/bg.jpg')
    # burn.png是一个4通道的图片,但是读取之后,变成了3通道,猜测跟flags有关
    logo = cv2.imread('./images/burn.png')
    logo_mask = cv2.imread('./images/burn.png', cv2.IMREAD_GRAYSCALE)
    # 在数组中根据条件进行批量变更数据
    logo_mask = np.where(logo_mask > 0, 255, 0)  # 这里的255是int32
    logo_mask = logo_mask.astype('uint8')  # 需要将logo_mask.dtype从int32转为uint8
    logo_width, logo_height = logo.shape[1], logo.shape[0]
    
    # print(logo_mask[60:80, 60:80])
    # print(cv2.bitwise_not(logo_mask)[60:80, 60:80])
    
    x, y = 400, 100
    bg_section = bg[y:y+logo_height, x:x+logo_width, :]
    bg_section = cv2.bitwise_and(bg_section, bg_section, mask=cv2.bitwise_not(logo_mask))
    bg_section = cv2.bitwise_or(bg_section, logo)
    bg[y:y+logo_height, x:x+logo_width, :] = bg_section
    
    # 绘制背景色
    window_name = 'window'
    cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
    cv2.resizeWindow(window_name, (800, 450))
    cv2.imshow(window_name, bg)
    
    # cv2.imshow('logo', logo_mask)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    image image

  • 相关阅读:
    数据库主从配置
    数据库导出导入
    MySQL命令行导出数据库
    [待完善]mycat使用(一)
    行转列group_concat()函数妙用
    sas和ssd盘写入数据效率对比
    MySQL库中表名忽略大小写设置的影响
    create table b1 as select * from b建表锁表测试
    SQL优化实战之加索引
    分区表主键不包含分区键报错ERROR 1105 (HY000)
  • 原文地址:https://www.cnblogs.com/TheoryDance/p/16407000.html
Copyright © 2020-2023  润新知