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

本文主要是介绍【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)

    请添加图片描述

这篇关于【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145722

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

java Stream操作转换方法

《javaStream操作转换方法》文章总结了Java8中流(Stream)API的多种常用方法,包括创建流、过滤、遍历、分组、排序、去重、查找、匹配、转换、归约、打印日志、最大最小值、统计、连接、... 目录流创建1、list 转 map2、filter()过滤3、foreach遍历4、groupingB

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.