网络编程
位置:首页>> 网络编程>> Python编程>> Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

作者:woshicver  发布时间:2023-01-01 19:56:43 

标签:Python,图像,算术,运算

介绍

还记得你在小学时学习如何加减数字吗?现在,你也可以对图像做同样的事情!

输入图像可以进行算术运算,例如加法、减法和按位运算(AND、OR、NOT、XOR)。这些操作可以帮助提高输入照片的质量。

在本文中,你将了解使用 OpenCV Python 包对图像执行算术和按位运算的步骤。让我们开始吧!

对图像进行算术运算是什么意思?

因此,假设我们希望合并两张单独的照片中的两个像素。我们怎样才能将它们合并?

让我们想象以下场景。第一个像素的颜色强度为 (200, 0, 0),而第二个像素的颜色强度为 (100, 0, 0)。如果我们只是将这些值相加,我们得到 (300, 0, 0)。这在处理 RGB 图像时是完全可能的。

那么,我们如何在 Python 中解决这个问题呢?

该解决方案附带实现了 cv2.add() 和 cv2.subtract() 函数的 OpenCV 库。

要执行这些操作,你必须在系统上安装 OpenCV Python 库。

算术运算:图像相加

使用 cv2.add() 函数,我们可以添加两个图像。cv2.add() 将两个图像中的图片像素相加。执行此操作时要记住的一件事是,两个图像应该具有相同的深度和类型,或者第二个图像可以只是一个标量值。

这个函数的语法是:cv2.add(img1, img2)

对于这个博客,我们将考虑以下两张图片来将两张图片相加。

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

在进行算术运算之前,你必须知道如何读取和显示加载的图像。

现在,按照下面的代码片段阅读,执行两个图像的添加,最后显示添加的图像。

import cv2

img1 = cv2.imread('image1_add.jpg', 1)
#or
#img1 = cv2.imread('C:\\Users\\Admin\\Downloads\\image1_add.jpg', 1)

cv2.imshow('Image 1', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

img2 = cv2.imread('image2_add.jpg', 1)
#or
#img2 = cv2.imread('C:\\Users\\Admin\\Downloads\\image2_add.jpg', 1)

cv2.imshow('Image 2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

# Add the images
added_img = cv2.add(img1, img2)

cv2.imshow('Added Image', added_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

从上面的代码片段中添加的图像如下:

Python中图像算术运算的示例详解

这只是简单的添加。我们可以使用另一个名为 cv2.addWeighted 的函数来混合图像。这类似于图像添加,但图像被赋予不同的权重以产生混合或透明的错觉。

这个函数的语法是:cv2.addWeighted(img1, wt1, img2, wt2, gammaValue)

按照下面的代码片段对两个图像执行加权加法。

import cv2

img1 = cv2.imread('image1_add.jpg', 1)
#or
#img1 = cv2.imread('C:\\Users\\Admin\\Downloads\\image1_add.jpg', 1)

cv2.imshow('Image 1', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

img2 = cv2.imread('image2_add.jpg', 1)
#or
#img2 = cv2.imread('C:\\Users\\Admin\\Downloads\\image2_add.jpg', 1)

cv2.imshow('Image 2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

#Addition - weighted addition
added_wt_img = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)

cv2.imshow('Added Weight Image', added_wt_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

加权加法的输出如下:

Python中图像算术运算的示例详解

在这里,拍摄了两张图像将它们混合在一起。第一张图片的权重为 0.6,第二张图片的权重为 0.4。你可以根据需要更改图像的权重!

算术运算:图像减法

就像两个图像相加一样,你可以减去两个图像。这可以使用 cv2.subtract() 函数来完成。请注意,要减去的图像必须具有相同的大小和深度。

这个函数的语法是:cv2.subtract(src1, src2)

下面的代码片段显示了如何减去两个图像。已经减去了之前使用的图像(我们在加法中使用的图像)。

import cv2

img1 = cv2.imread('image1_add.jpg', 1)
#or
#img1 = cv2.imread('C:\\Users\\Admin\\Downloads\\image1_add.jpg', 1)

cv2.imshow('Image 1', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

img2 = cv2.imread('image2_add.jpg', 1)
#or
#img2 = cv2.imread('C:\\Users\\Admin\\Downloads\\image2_add.jpg', 1)

cv2.imshow('Image 2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

sub_img = cv2.subtract(img1, img2)

cv2.imshow('Subtracted Image', sub_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

减去的图像如下:

Python中图像算术运算的示例详解

还尝试减去两个更简单的图像以使其更易于理解。使用的两张图片是:

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

减去的输出是:

Python中图像算术运算的示例详解

既然我们已经了解了如何对图像执行算术运算,我们将继续对图像进行按位运算。

位运算

当我们只需要提取图像所需的元素时,我们会使用按位运算。

这些按位技术用于各种计算机视觉应用,例如创建图像蒙版、将水印应用于图像以及创建新图像。与 OpenCV 中的其他变形方法相比,这些操作对图像中的单个像素起作用,以产生更准确的结果。

图像上的 And、Or 和 Not 操作

在开始之前,假设你熟悉三个基本的位运算符:AND、OR、NOT。

OpenCV 包括用于执行与、或和非操作的内置函数。它们是按位与、按位或和按位非。考虑下面的两张黑白图像。现在让我们将这三个操作应用于这两个图像,看看会发生什么。

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

import cv2

#read the images
img1 = cv2.imread('bitwise_image_1.jpg')
img2 = cv2.imread('bitwise_image_2.jpg')

bitwise_AND = cv2.bitwise_and(img1, img2)
bitwise_OR = cv2.bitwise_or(img1, img2)
bitwise_NOT = cv2.bitwise_not(img1)

cv2.imshow('img1', img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('img2', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('AND', bitwise_AND)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('OR', bitwise_OR)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow('NOT', bitwise_NOT)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码段的输出将如下所示:

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

Python中图像算术运算的示例详解

希望你已经学会了如何使用 OpenCV 对图像进行算术和按位运算。

来源:https://blog.csdn.net/woshicver/article/details/124564633

0
投稿

猜你喜欢

  • 以前写JS程序的时候,经常碰到了定位的问题。但每次都看到一半,找到需要的属性就了事了。今天下了狠心,要花点时间,彻底地弄明白他。以下内容看着
  • Mysql的安装方法 安装mysql的步骤如下:请注意按图中所示,有些选项和默认是不一样的。同时,如果您是重新安装mysql的话,要注意先备
  • 本文实例为大家分享了TensorFlow实现创建分类器的具体代码,供大家参考,具体内容如下创建一个iris数据集的分类器。 加载样本数据集,
  • pycharm 不显示代码提示1、检查IDE省电模式是否关闭状态!!!file → power save mode 取消掉2、检查代码提示是
  • 关于opencvOpenCV 是 Intel 开源计算机视觉库 (Computer Version) 。它由一系列 C 函数和少量 C++
  • 上下班打卡是程序员最讨厌的东西,更讨厌的是设置了连上指定wifi打卡。手机上有一些定时机器人之类的app,经过实际测试,全军覆没,没一个可以
  • 网站,(100-1)%的内容是导航1、Jesse James Garrett 在《用户体验要素》一书中提到了多重导航系统:全局导航、局部导航
  • 当你准备全面进军web标准时,有时候你是不是被表格的弄得焦头烂额呢?比如,原来使用“非法”的nobr现在要用什么来代替呢?今天,就让我来一个
  • 1.zip用法简介在python 3.x系列中,zip方法返回的为一个zip object可迭代对象。class zip(object):&
  • 1、将python程序打包成单文件(使用 -F 参数)后,尝试运行外部文件却提示找不到的问题当你将python程序打包成单文件(使用 -F
  • 在用Pycharm运行项目时,不知道干了什么,导致运行后无法像平时那样显示输出结果:最后试了很多种方法,终于解决了:将打勾的地方去掉,不要运
  • 对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于
  • 本文实例讲述了Python 类的私有属性和私有方法。分享给大家供大家参考,具体如下:xx:公有变量_xx:公有变量或方法,不能通过impor
  • 一.背景一道ctf题,通过破解2048游戏获得flag游戏的规则很简单,需要控制所有方块向同一个方向运动,两个相同数字方块撞在一起之后合并成
  • 在深度学习或者其他类型的GPU运算过程中,对于GPU信息的监测也是一个非常常用的功能。如果仅仅是使用系统级的GPU监测工具,就没办法非常细致
  • 用过软件的朋友都知道,进度条是一个优秀软件的重要组成部分。它的存在能够使用户及时掌握程序的运行进度,确认应用程序正常工作。可是ASP中似乎没
  • 蜗牛很慢。蜗牛快递会怎样?答案是:当然也会很慢。但是蜗牛尽了他的全力,为了它的兔子朋友,以生命在奔跑。每天都是24个小时,快的只是速度,却不
  • (一)问题遗传算法求解正方形拼图游戏(二)代码#!/usr/bin/env python# -*- coding: utf-8 -*-fro
  • asp十进制转二进制;二进制转十进制;二进制转十六进制;十六进制转二进制;八进制转二进制'二进制转八进制;八进制转十进制;十六进制转
  • 目录:分析和设计组件编码实现和算法用 Ant 构建组件测试 JavaScript 组件本期,我们要讨论的话题是 JavaScript 的测试
手机版 网络编程 asp之家 www.aspxhome.com