OpenCV入门(八)快速学会OpenCV7图像运算
创始人
2024-06-02 06:54:04
0

OpenCV入门(八)快速学会OpenCV7图像运算

作者:Xiou

针对图像的加法运算、位运算都是比较基础的运算。但是,很多复杂的图像处理功能正是借助这些基础的运算来完成的。所以,牢固掌握基础操作,对于更好地实现图像处理是非常有帮助的。

简单介绍一下加减法运算、逻辑运算,并使用它们实现了位平面分解、图像异或加密、数字水印、脸部打码/解码等实例。

实例原图所示:
test.jpg
在这里插入图片描述
res.jpg
在这里插入图片描述

1.加减法运算

在图像处理过程中,经常需要对图像进行加法运算。可以通过加号运算符“+”对图像进行加法运算,也可以通过cv2.add()函数对图像进行加法运算。

通常情况下,在灰度图像中,像素用8个比特位(一个字节)来表示,像素值的范围是[0,255]。两个像素值在进行加法运算时,求得的和很可能超过255。上述两种不同的加法运算方式,对超过255的数值的处理方式是不一样的。

1.1 加法运算

函数cv2.add()可以用来计算图像像素值相加的和,其语法格式为:

        计算结果=cv2.add(像素值a,像素值b)

两张图像相加实例代码:

import cv2 as cvdef add(image1, image2):"""相加"""result = cv.add(image1, image2)cv.imshow("add_demo", result)cv.waitKey(0)cv.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img1 = cv.imread("test.jpg")img2 = cv.imread("res.jpg")print(img1.shape,img2.shape)# 获得相加的图片add = add(img1, img2)# 保存图片cv.imwrite("add.jpg", add)

切记:img1和img2大小要一样,否则会报错!!

Traceback (most recent call last):File "C:\Users\mjl\Desktop\CV-test\CV2.py", line 19, in add = add(img1, img2)File "C:\Users\mjl\Desktop\CV-test\CV2.py", line 5, in addresult = cv.add(image1, image2)
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:650: error: (-209:Sizes of input arguments do not match) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function 'cv::arithm_op'

输出结果:

在这里插入图片描述

1.2 减法运算

代码实例:

import cv2def subtract(image1, image2):"""相减"""result = cv2.subtract(image1, image2)cv2.imshow("add_demo", result)cv2.waitKey(0)cv2.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img1 = cv2.imread("test.jpg")img2 = cv2.imread("res.jpg")# 获取相减图片subtract = subtract(img1, img2)# 保存图片cv2.imwrite("subtract.jpg", subtract)

输出结果:
在这里插入图片描述

1.3乘法运算

代码实例:

import cv2def multiply(image1, image2):"""相成"""result = cv2.multiply(image1, image2)cv2.imshow("add_demo", result)cv2.waitKey(0)cv2.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img1 = cv2.imread("test.jpg")img2 = cv2.imread("res.jpg")# 获取相乘图片multiply = multiply(img1, img2)# 保存图片cv2.imwrite("multiply.jpg", multiply)

输出结果:
在这里插入图片描述

1.4除法运算

代码实例:

import cv2def divide(image1, image2):"""相除"""result = cv2.divide(image1, image2)cv2.imshow("add_demo", result)cv2.waitKey(0)cv2.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img1 = cv2.imread("test.jpg")img2 = cv2.imread("res.jpg")# 获取相除图片divide = divide(img1, img2)# 保存图片cv2.imwrite("divide.jpg", divide)

输出结果:

在这里插入图片描述

2.逻辑运算

逻辑运算是一种非常重要的运算方式,图像处理过程中经常要按照位进行逻辑运算,简单介绍OpenCV中的按位逻辑运算,简称位运算。
在这里插入图片描述

2.1逻辑与运算

在OpenCV中,可以使用cv2.bitwise_and()函数来实现逻辑与运算,其语法格式为:

        dst = cv2.bitwise_and( src1, src2[, mask]] )

代码实例:

import cv2def logic_and(image1, image2):"""逻辑与"""result = cv2.bitwise_and(image1, image2)# 结果展示cv2.imshow("result", result)cv2.waitKey(0)cv2.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img1 = cv2.imread("test.jpg")img2 = cv2.imread("res.jpg")# 获取逻辑与后的图片logic_and = logic_and(img1, img2)# 保存图片cv2.imwrite("logic_and.jpg", logic_and)

输出结果:
在这里插入图片描述

2.1逻辑或运算

在OpenCV中,可以使用cv2.bitwise_or()函数来实现按位或运算,其语法格式为:

        dst = cv2.bitwise_or( src1, src2[, mask]] )

代码实例:

import cv2def logic_or(image1, image2):"""逻辑或"""result = cv2.bitwise_or(image1, image2)# 结果展示cv2.imshow("result", result)cv2.waitKey(0)cv2.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img1 = cv2.imread("test.jpg")img2 = cv2.imread("res.jpg")# 获取逻辑或后的图片logic_or = logic_or(img1, img2)# 保存图片cv2.imwrite("logic_or.jpg", logic_or)

输出结果:

在这里插入图片描述

2.3逻辑反

在OpenCV中,可以使用函数cv2.bitwise_not()来实现按位取反操作,cv2.bitwise_not()可以帮助我们实现像素取反.,其语法格式为:

        dst = cv2.bitwise_not( src[, mask]] )

代码实例:

import numpy as np
import cv2def logic_not(image):"""逻辑非"""result = cv2.bitwise_not(img)# 合并result = np.hstack((img, result))# 结果展示cv2.imshow("result", result)cv2.waitKey(0)cv2.destroyAllWindows()return resultif __name__ == "__main__":# 读取图片img = cv2.imread("test.jpg")# 获取取反图片logic_not = logic_not(img)# 保存图片cv2.imwrite("logic_not.jpg", logic_not)

输出结果:

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...