Python-图像上的算术运算

Python-图像上的算术运算,第1张

概述图像加法你可以使用函数cv2.add()将两幅图像进行加法运算,当然也可以直接使用numpy,res=img1+img。两幅图像的大小,类型必须一致,或者第二个图像可以使一个简单的标量值。importnumpyasnpimportcv2frommatplotlibimportpyplotaspltimportmatplotlib.imageasmpimg 图像加法

你可以使用函数cv2.add() 将两幅图像进行加法运算,当然也可以直接使
用numpy,res=img1+img。两幅图像的大小,类型必须一致,或者第二个
图像可以使一个简单的标量值。

import numpy as npimport cv2from matplotlib import pyplot as pltimport matplotlib.image as mpimg # mpimg 用于读取图片x=np.uint8([250])y=np.uint8([10])z1=cv2.add(x,y)print(z1)z2=x+yprint(z2)

这种差别在你对两幅图像进行加法时会更加明显。OpenCV 的结果会更好
一点。所以我们尽量使用OpenCV 中的函数。

图像混合

这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混
合或者透明的感觉。图像混合的计算公式如下:

通过修改a的值(0 -> 1),可以实现非常酷的混合。

现在我们把两幅图混合在一起。第一幅图的权重是0.7,第二幅图的权重
是0.3。函数cv2.adDWeighted() 可以按下面的公式对图片进行混合 *** 作。

这里r的取值为0。

import numpy as npimport cv2from matplotlib import pyplot as pltimport matplotlib.image as mpimg # mpimg 用于读取图片img1=cv2.imread('3.jpg')img2=cv2.imread('4.jpg')dst=cv2.adDWeighted(img1,0.7,img2,0.3,0)cv2.imshow('dst',dst)cv2.waitKey(0)cv2.destroyAllwindows()

裁剪图像
import cv2import numpy as npfrom PIL import Imageimg = cv2.imread("2.jpeg")print(img.shape)cropped = img[0:1200, 0:1200]  # 裁剪坐标为[y0:y1, x0:x1]cv2.imwrite("2.png", cropped)
按位运算

这里包括的按位 *** 作有:AND,OR,NOT,XOR 等。当我们提取图像的一部分,选择非矩形ROI 时这些 *** 作会很有用。下面的例子就是教给我们如何改变一幅图的特定区域。

我想把树叶的标志放到另一幅图像上。如果我使用加法,颜色会改变,如果使用混合,会得到透明效果,但是我不想要透明。如果他是矩形我可以象上一章那样使用ROI。但是他不是矩形。但是我们可以通过下面的按位运算实现:

import numpy as npimport cv2from matplotlib import pyplot as pltimport matplotlib.image as mpimg # mpimg 用于读取图片#让img2的logo放在img1的左上角 所以创建一个ROIimg1=cv2.imread('4.jpg')img2=cv2.imread('5.jpg')rows,cols,channels=img2.shaperoi=img1[0:rows,0:cols]#创建掩模img2gray=cv2.cvtcolor(img2,cv2.color_BGR2GRAY)ret,mask=cv2.threshold(img2gray,175,255,cv2.THRESH_BINARY)cv2.imshow('mask',mask)#反运算mask_inv=cv2.bitwise_not(mask)cv2.imshow('mask_inv',mask_inv)# 取roi 中与mask 中不为零的值对应的像素的值,其他值为0# 注意这里必须有mask=mask 或者mask=mask_inv, 其中的mask= 不能忽略img1_bg=cv2.bitwise_and(roi,roi,mask=mask)cv2.imshow('img1_bg',img1_bg)# 取roi 中与mask_inv 中不为零的值对应的像素的值,其他值为0。# Take only region of logo from logo image.img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)cv2.imshow('img2_bg',img2_fg)# Put logo in ROI and modify the main imagedst = cv2.add(img1_bg,img2_fg)img1[0:rows, 0:cols ] = dstcv2.imshow('res',img1)cv2.waitKey(0)cv2.destroyAllwindows()

结果如下,为了帮助大家理解我把上面程序的中间结果也显示了出来,特别是img1_bg 和img2_fg。

总结

以上是内存溢出为你收集整理的Python-图像上的算术运算全部内容,希望文章能够帮你解决Python-图像上的算术运算所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1184989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存