【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

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

Python 中的 with open文件操作的最佳实践

《Python中的withopen文件操作的最佳实践》在Python中,withopen()提供了一个简洁而安全的方式来处理文件操作,它不仅能确保文件在操作完成后自动关闭,还能处理文件操作中的异... 目录什么是 with open()?为什么使用 with open()?使用 with open() 进行

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各