当前位置: 首页 > news >正文

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算
1.1 图像的加法运算
1.2 图像的减法运算
1.3 图像的融合
2 OpenCV的位运算
2.1 非操作
2.2 与运算
2.3 或和异或

1 图像的算术运算

1.1 图像的加法运算

  • add opencv使用add来执行图像的加法运算

图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的.

# 图片加法
import cv2cat = cv2.imread('./cat.jpeg')
dog = cv2.imread('./dog.jpeg')# 加法要求两个图片大小一致
print(cat.shape)
print(dog.shape)
# 把猫的图片变小
# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.
new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
# 和单个数字运算, 超过255 会被截断, 相当于 % 256
print(new_cat[0:5, 0:5])
print(new_cat[0:5, 0:5] + 100) 
cv2.imshow('cat_dog', np.hstack((new_cat, dog)))
# 加法, 加法的效果是加起来如果超过255, 统一变成255
new_img = cv2.add(new_cat, dog)
print(new_img[0:5, 0:5])
cv2.imshow('cat_dog', np.hstack((new_cat, dog, new_img)))cv2.waitKey(0)
cv2.destroyAllWindows()

请添加图片描述

1.2 图像的减法运算

  • subtract

  • opencv使用subtract来执行图像的减法运算, 图像对应位置的元素相减, 如果减完小于0, 统一变成0.

  # 图片减法import cv2cat = cv2.imread('./cat.jpeg')dog = cv2.imread('./dog.jpeg')# 加法要求两个图片大小一致print(cat.shape)print(dog.shape)# 把猫的图片变小# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))# 减法new_img = cv2.subtract(new_cat, dog)print(new_cat[0:5, 0:5], dog[0:5, 0:5])print(new_img[0:5, 0:5])cv2.imshow('cat_dog', np.hstack((new_cat, dog, new_img)))cv2.waitKey(0)cv2.destroyAllWindows()

请添加图片描述

  • 同样的还有乘法, 除法运算. cv2.mutiply, cv2.divide, 原理是类似的.

1.3 图像的融合

  • cv2.addWeighted(src1, alpha, src2, beta, gamma)

  • 图片的融合操作相当于对图片进行线性运算 w1* x1 + w2 * x2 + b. 其中alpha是第一个权重参数, beta是第二个权重参数, gamma是偏差.

    import cv2cat = cv2.imread('./cat.jpeg')
    dog = cv2.imread('./dog.jpeg')new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
    # 相当于res = new_cat * 0.4 + dog * 0.6 + 0
    res = cv2.addWeighted(new_cat, 0.4, dog, 0.6, 0)cv2.imshow('cat_dog', np.hstack((new_cat, dog, res)))cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请添加图片描述

2 OpenCV的位运算

2.1 非操作

  • bitwise_not(img) 非操作的效果就相当于是用 255 - img

    import cv2
    import numpy as npcat = cv2.imread('./cat.jpeg')
    dog = cv2.imread('./dog.jpeg')cat_not = cv2.bitwise_not(cat)
    cat_not_not = cv2.bitwise_not(cat_not)
    cv2.imshow('not', np.hstack((cat, cat_not, cat_not_not)))
    print(cat[:3, :3])
    print(cat_not[:3, :3])
    print(cat_not_not[:3, :3]cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请添加图片描述

2.2 与运算

  • bitwise_and(img1, img2) 与运算, 图片对应位置元素进行与操作. 表现出来的效果就是黑和黑与还是黑, 白和白与还是白.

    import cv2
    import numpy as npcat = cv2.imread('./cat.jpeg')
    dog = cv2.imread('./dog.jpeg')new_cat = cv2.resize(cat, (dog.shape[:-1][::-1]))
    cat_and_dog = cv2.bitwise_and(new_cat, dog)
    cv2.imshow('not', np.hstack((new_cat, cat_and_dog)))
    print('cat:', new_cat[:3, :3])
    print('-----------')
    print('dog:', dog[:3, :3])
    print('-----------')
    print(cat_and_dog[:3, :3])cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    请添加图片描述

2.3 或和异或

  • bitwise_or 或运算 对应元素做或运算

  • bitwise_xor 异或运算 对应元素做异或运算

    import cv2
    import numpy as np#创建一张图片
    img = np.zeros((200,200), np.uint8)
    img2 = np.zeros((200,200), np.uint8)img[20:120, 20:120] = 255
    img2[80:180, 80:180] = 255#new_img = cv2.bitwise_bit(img)
    #new_img = cv2.bitwise_and(img, img2)
    #new_img = cv2.bitwise_or(img, img2)
    new_img = cv2.bitwise_xor(img, img2)cv2.imshow('new_img', new_img)
    cv2.imshow('img', img)
    cv2.imshow('img2', img2)
    cv2.waitKey(0)

    请添加图片描述

http://www.lryc.cn/news/435469.html

相关文章:

  • ChatGPT 3.5/4.0使用手册:解锁人工智能的无限潜能
  • E32.【C语言 】练习:蓝桥杯题 懒羊羊字符串
  • Linux 网络基础概念
  • 【题目】MySQL选择题
  • 自然语言处理系列六十三》神经网络算法》LSTM长短期记忆神经网络算法
  • 亚马逊IP关联及其解决方案
  • Definition and Detection of Defects in NFT Smart Contracts论文解读、复现
  • Neo4j图数据库
  • k8s API资源对象
  • GB/T28181规范解读之编码规则详解
  • Vue封装的过度与动画(transition-group、animate.css)
  • 免费云服务器申请教程
  • Spring Cloud Gateway中的常见配置
  • SelectDB 多计算集群核心设计要点揭秘与场景应用
  • Docker 清理和查看镜像与容器占用情况
  • 如何在Android 12 aosp系统源码中添加三指下滑截图功能
  • 使用SQL语句查询MySQL数据表
  • 【AI绘画、换脸、写作、办公】从零开始:使用AIStarter启动器发布AI应用
  • eeprom使用 cubemx STM32F407ZGT6【IIC驱动AT24C02】
  • STL-stack/queue/deque(容器适配器)
  • NVDLA专题15:Runtime environment-核心模式驱动
  • 计算机毕业设计选题推荐-班级管理系统-教务管理系统-Java/Python项目实战
  • 推荐一款开源、高效、灵活的Redis桌面管理工具:Tiny RDM!支持调试与分析功能!
  • Java项目: 基于SpringBoot+mybatis+maven新闻推荐系统(含源码+数据库+毕业论文)
  • 《Python读取 Excel 数据》
  • Druid连接池
  • Python3网络爬虫开发实战(14)资讯类页面智能解析
  • 社交媒体的未来:Facebook如何通过AI技术引领潮流
  • Java 面试题:从源码理解 ThreadLocal 如何解决内存泄漏 ConcurrentHashMap 如何保证并发安全 --xunznux
  • 使用人力劳务灵工安全高效的发薪工具