Python-图像上的算术运算
2021/6/10 14:22:44
本文主要是介绍Python-图像上的算术运算,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
图像加法
你可以使用函数cv2.add() 将两幅图像进行加法运算,当然也可以直接使
用numpy,res=img1+img。两幅图像的大小,类型必须一致,或者第二个
图像可以使一个简单的标量值。
import numpy as np import cv2 from matplotlib import pyplot as plt import matplotlib.image as mpimg # mpimg 用于读取图片 x=np.uint8([250]) y=np.uint8([10]) z1=cv2.add(x,y) print(z1) z2=x+y print(z2)
这种差别在你对两幅图像进行加法时会更加明显。OpenCV 的结果会更好
一点。所以我们尽量使用OpenCV 中的函数。
图像混合
这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混
合或者透明的感觉。图像混合的计算公式如下:
通过修改a的值(0 -> 1),可以实现非常酷的混合。
现在我们把两幅图混合在一起。第一幅图的权重是0.7,第二幅图的权重
是0.3。函数cv2.addWeighted() 可以按下面的公式对图片进行混合操作。
这里r的取值为0。
import numpy as np import cv2 from matplotlib import pyplot as plt import 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 cv2 import numpy as np from PIL import Image img = 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 np import cv2 from matplotlib import pyplot as plt import matplotlib.image as mpimg # mpimg 用于读取图片 #让img2的logo放在img1的左上角 所以创建一个ROI img1=cv2.imread('4.jpg') img2=cv2.imread('5.jpg') rows,cols,channels=img2.shape roi=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 image dst = cv2.add(img1_bg,img2_fg) img1[0:rows, 0:cols ] = dst cv2.imshow('res',img1) cv2.waitKey(0) cv2.destroyAllWindows()
结果如下,为了帮助大家理解我把上面程序的中间结果也显示了出来,特别是img1_bg 和img2_fg。
这篇关于Python-图像上的算术运算的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门