OpenCV 简介

图像可以进行算术运算,例如加法、减法和按位运算(AND、OR、NOT、XOR)。这些操作可以帮助改善输入图像的属性。

图像算法对于分析输入图像的属性是必要的,可以将操作后的图像用作增强的输入图像,并且可以对图像应用更多操作,以进行阈值化、膨胀等。

图像算术是将一幅或多幅图像应用于标准算术运算或逻辑运算符之一。运算符是逐个像素应用的,因此输出图像中像素的值仅由输入图像中相应像素的值决定。

因此,图像通常必须具有相同的大小。当向图像添加恒定偏移量时,输入图像之一可能是恒定值。

虽然图像算法是图像处理的最基本形式,但它有很多应用。算术运算符的一个显着优势是该过程简单明了,因此速度很快。

添加图像

在其最基本的形式中,该运算符将两个相同大小的图像作为输入,并输出与前两个相同大小的第三个图像,每个像素值是两个输入图像中每个图像中对应像素值的总和. 更高级的版本允许在一次操作中组合多个图像。

运算符的一个常见变体只是允许向每个像素添加一个指定的常数。使用函数 cv2.add(),我们可以添加两个图像。这直接将两个图像中的图像像素相加。

Syntax: cv2.add(image1, image2)

但是,添加像素并不是一个理想的情况。因此,我们使用 cv2.addweighted()。请记住,两个输入图像的形状和颜色通道必须相同。

Syntax: cv2.add Weighted(image1, weight1, Image2, weight2, gammaValue)

参数:

image1:第一个图像数组输入

weight 1:输入图像中第一个用于最终图像的图像元素的权重。

image2:第二个图像数组输入

weight 2:将第二输入图像元素的权值应用于最终图像的伽马值。

gammaValue:光测量。

加法代码

import cv2
import numpy as np
image1 = cv2.imread('input1.jpg')
image2 = cv2.imread('input2.jpg')
weightedSumadd = cv2.addWeighted(image1, 0.6, image2, 0.4, 0)
cv2.imshow('Weighted Image', weightedSumadd)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出图像将是:

图像减法

像素减法算子将两幅图像作为输入并输出第三幅图像,其像素值是第一幅图像的像素值减去第二幅图像的相应像素值。

使用单个图像作为输入是常见的,从所有像素中减去一个常数值也是常见的。一些版本的运算符将简单地输出像素值之间的绝对差,而不是直接的有符号输出。

Syntax:  cv2.subtract(image1, image2)

参数:

图 1:第一个图像数组输入(单通道、8 位或浮点)

图 2:第二个图像阵列输入(单通道、8 位或浮点)

输入图像

代码 :

import cv2
import numpy as np
image1 = cv2.imread('input1.jpg')
image2 = cv2.imread('input2.jpg')
sub = cv2.subtract(image1, image2)
cv2.imshow('Subtracted Image', sub)
cv2.waitKey(0)

输出减去的图像将是

位运算

位运算用于图像处理以提取重要部分。本文中使用了以下按位运算:

  • AND
  • OR
  • NOT
  • XR

位运算对于图像遮罩也很有用。这些操作可用于启用图像创建。这些操作可以帮助改善输入图像的属性。

注意:按位运算只能在相同尺寸的输入图像上执行。

图像的 AND 位运算

AND 运算符(以及类似方式的 NAND 运算符)通常将两个二进制或整数灰度级图像作为输入,并生成第三个图像,其像素值只是第一个图像的像素值与来自第二个图像的相应像素相乘。

可以修改此运算符以通过获取单个输入图像,并将每个像素与预定的常数值进行与运算来产生输出。

Syntax: cv2.bitwise_and(Image1, Image2, destination, mask)

参数:

Image1:第一个输入图像 numpy 数组

Image1:第二个输入图像numpy数组

destination:输出数组

mask: 操作掩码图像

代码 :

import cv2
import numpy as np
img1 = cv2.imread('input1.png') 
img2 = cv2.imread('input2.png')
dest_and = cv2.bitwise_and(img2, img1, mask = None)
cv2.imshow('Bitwise And', dest_and)
cv2.waitKey(0)

图像的 OR 位运算

OR 运算符通常将两个二进制或灰度图像作为输入,并输出第三个图像,其像素值是第一个图像的像素值与来自第二个图像的相应像素进行或运算。

该运算符的一个变体采用单个输入图像并将每个像素与一个常数值进行 OR 运算以生成输出。

Syntax: cv2.bitwise_or(source1, source2, destination, mask)

参数:

source1 第一个输入 numpy 图像数组

source2 第二个输入 numpy 图像数组

目的地输出数组图像

mask 操作掩码,输入/输出 8 位单通道掩码。

代码 :

import cv2
import numpy as np
img1 = cv2.imread('input1.png') 
img2 = cv2.imread('input2.png')
dest_or = cv2.bitwise_or(img1, img2, mask = None)
cv2.imshow('Bitwise OR', dest_or)
cv2.waitKey(0)

图像的NOT位运算

逻辑非,也称为反转,是一种将二值或灰度图像作为输入并生成其照相底片的运算符。

Syntax: cv2.bitwise_not(Image1,Destination, mask)

参数:

Image1: 输入图像数组

Destination:输出数组图像

mask: 操作掩码

代码 :

import cv2
import numpy as np
img1 = cv2.imread('input1.png') 
dest_not = cv2.bitwise_not(img1, mask = None)
cv2.imshow('Bitwise Not', dest_not)
cv2.waitKey(0)

图像的 XR 位运算

至关重要的是,正在处理的所有输入像素值都具有相同的位数,否则可能会出现意外结果。当输入图像中的像素值不是简单的 1 位数字时,XOR 操作通常(但不总是)对像素值中的每个对应位按位执行。

Syntax: cv2.bitwise_xor(source1, source2, destination, mask)

参数:

source1 第一个输入图像数组(单通道、8 位或浮点)

source2 第二个输入图像数组(单通道、8 位或浮点)

目的地输出图像数组

mask 操作掩码,输入/输出8位单通道掩码。

代码 :

import cv2
import numpy as np
img1 = cv2.imread('input1.png') 
img2 = cv2.imread('input2.png')
dest_or = cv2.bitwise_xor(img1, img2, mask = None)
cv2.imshow('Bitwise XOR', dest_xor)
cv2.waitKey(0)

OpenCV的结论

许多应用程序使用从同一场景的不同点获取的经过处理的图像,例如通过添加相同场景的连续图像来降低噪声或通过减去两个连续图像来进行运动检测。逻辑运算符经常用于组合两个(主要是二进制)图像。

在整数图像的情况下,逻辑运算符通常按位使用。然后,例如,我们可以使用二进制掩码来选择图像的特定区域。

关键要点:

在本文中,我们学习了如何对图像执行各种算术运算,OpenCV 方法是如何工作的,以及这些图像算术运算在哪里使用。

以上就是详解图像上的OpenCV算术运算的详细内容,更多关于OpenCV图像算术运算的资料请关注Devmax其它相关文章!

详解图像上的OpenCV算术运算的更多相关文章

  1. iOS使用openCV检测来自摄像头的矩形

    如果我在处理它之前克隆matimage,通过记录它,它似乎处理图像甚至找到矩形,但矩形不会被绘制到图像输出到imageView.我很确定我错过了一些东西,可能是因为我没有正确传递某个对象,指向对象的指针等等,而我需要修改的对象则没有.无论如何,如果这不是正确的方法,我真的很感谢他们做这样的事情的教程或例子,使用openCV或GPUImage…它不需要尝试使用matimage来设置imageView.image,而只需要将matimage转换为在imageView中实际修改,因为CvVideoCamera已

  2. 使用Xcode为OS X Lion / Mountain Lion编译OpenCV(2.3.1)

    任何人都可以为我提供一些如何使用Xcode在OSXLion上编译OpenCV2.3.1的详细指南吗?我对此感到生气…我得到了源码,使用cmake创建Xcode模板并尝试构建它,但它失败了大约200个错误.提前致谢,大教堂解答我的回答帖子.解决方法详细指南如何使用MacPorts在Xcode4.2.1的OSXLion下启动和运行OpenCV2.3.1编辑08/06/2012:这也适用于OpenCV2.4.1.只需确保您获得最新版本的Xcode并安装“命令行工具”.编辑15/08/2012:使用Mountai

  3. ios – OpenCV构建问题,找不到ext/atomicity.h

    我得到编译器错误抱怨在构建包含OpenCV的项目时.环境是针对iOS的Xcode4.5.它为模拟器编译良好,但在为设备构建时失败.这是错误文本:我正在使用opencv2.framework,使用指令here构建cmake.解决方法默认情况下,XCode4.5使用libc(支持C11的LLVMC标准库)生成要构建的新项目.但OpenCV期望针对GNUlibstd

  4. 从IOS / iPad / iPhone的最大速度

    我使用OpenCVforiOS完成计算密集型应用程序.当然这很慢.但它比我的PC原型慢了200倍.所以我正在优化它.从最初的15秒,我能够获得0.4秒的速度.我想知道我是否找到了所有的东西以及别人想要分享的东西.我做了什么:>将OpenCV中的“double”数据类型替换为“float”.双倍是64位,32位cpu不能轻易处理,所以浮动给了我一些速度.OpenCV经常使用双倍.>为编译器选项添加了

  5. 在Swift iOS中使用OpenCV

    在我的xcode项目中添加OpenCV2框架后,我试图搜索samlpes或教程与swift集成。有什么好的教程同样吗?OpenCV是用C编写的框架。苹果的reference告诉我们YoucannotimportC++codedirectlyintoSwift.Instead,createanObjective-CorCwrapperforC++code.所以你不能在一个swift项目中直接导入和使用OpenCV,但这实际上并不坏,因为你(需要)继续使用框架的C语法,这是在网络上有很多文档。那么你怎么进行呢

  6. 在Android Studio中解决已弃用的NDK警告

    或者除了添加所有已编译的代码并设置我之前提到的标志之外,还有其他方法可以将OpenCV导入Android项目吗?任何有关这方面的帮助将不胜感激.解决方法我建议迁移到使用cmake的本机支持.您可以查看链接,该链接提供了使用cmake通过以下link添加OpenCV的分步教程.您的代码应该保持不变而不做任何更改,只有必要的操作才能弄清楚如何使用CMakeLists.txt将它们包含在构建过程中.

  7. android – opencv管理器包没找到?如何自动安装?

    我正在使用openCV,每当我运行代码时它都会给我包管理器没有安装,那么如何通过我的应用程序安装它.是必须从Play商店下载它还是我们可以在设备中自动安装它.请帮我.提前致谢.解决方法您需要使用静态初始化来包含apk中的所有OpenCV二进制文件.请参阅此文档:ApplicationDevelopmentwithStaticInitialization

  8. 如何从Android相机中找到框架的轮廓并将其转换为box2d实体?

    使用openframeworks,OpenCV和Box2D,我能够以良好的帧速率实现它.使用Android似乎是一项更复杂的任务(部分原因是我是JAVA新手).这就是我的开始:>使用“OpenCV示例–图像处理”并删除除“canny”效果之外的所有内容,这会产生一个漂亮的黑色&白色图像,非常适合找到轮廓.>从“OpenCVSample–color-blob-detection”中我抓住了在Mat中

  9. 在Android上的OpenCV中逐帧处理视频

    如果是的话,你知道任何例子.>编译适用于Android的FFMPEG也是一种选择.但是,我认为自己编写FrameGrabber和FrameRecorder有点过分.我认为除了JavaCV之外,还必须存在一些解决方案.>从API18开始,Android中有MediaCodec和Mediamuxer.也许他们可以帮助我?

  10. 使用opencv进行android角点跟踪

    当我相对于Android相机移动它时,我试图跟踪一张纸的角落的位置(您可以假设纸张将是与背景完全不同的颜色).我想找到android屏幕上每个角落的x,y坐标.我也希望能够改变纸张的角度,因此它不一定会一直呈现出完美的矩形.我正在使用opencv2.4.1forAndroid,但我在包中找不到cvgoodfeaturetotrack或cvfindcornersubpix.现在我正在考虑使用CvCa

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部