实验目的
1. 学会读入图片,显示图片
2. 学会使用两幅图片进行叠加
3. 学会使用图像进行平移
- 实验内容
第 1 部分:读入图片
第 2 部分:图像任意比例缩放
第 3 部分:两幅图像进行叠加
第 4 部分:对图像进行旋转
第 5 部分:对图像进行平移
- 实验过程
第 1 部分:读入图片
第 2 部分:图像任意比例缩放
import cv2 as cv
img = cv.imread("./lena.tif",cv.IMREAD_COLOR)
imgInfo = img.shape
print(imgInfo)
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]
newHeight = int(height*0.5)
newWidth = int(width*0.5)
newImg = cv.resize(img,(newWidth,newHeight))
cv.imshow("result",newImg)
cv.waitKey(0)
cv.destroyALLWindows()
第 3 部分:两幅图像进行叠加
import cv2 as cv
# 读取一张图片
img1 = cv.imread("./lena.tif")
img2 = cv.imread("./green.jpg")
# 重置图片2的大小以匹配图片1
img3 = cv.resize(img2, (img1.shape[1], img1.shape[0]))
# 利用addWeighted API实现两张图片的叠加
dst = cv.addWeighted(img1, 0.5, img3, 0.5, 0)
# 显示图片
cv.imshow("1", img1)
cv.imshow("2", img2)
cv.imshow("dst", dst)
cv.waitKey(0)
cv.destroyAllWindows()
第 4 部分:对图像进行旋转
import cv2 as cv
import numpy as np
img = cv.imread("./lena.tif")
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
matrixShift = np.float32([
[1,0,50],
[0,1,100]
])
dstImg = cv.rotate(img,cv.ROTATE_90_CLOCKWISE)
cv.imshow("dst",dstImg)
cv.waitKey(0)
第 5 部分:对图像进行平移
import cv2 as cv
import numpy as np
img = cv.imread("./lena.tif")
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
matrixShift = np.float32([
[1,0,50],
[0,1,100]
])
dstImg = cv.warpAffine(img,matrixShift,(width,height))
cv.imshow("dst",dstImg)
cv.waitKey(0)
- 实验结果
第 1 部分:读入图片
第 2 部分:图像任意比例缩放
第 3 部分:两幅图像进行叠加
第 4 部分:对图像进行旋转
第 5 部分:对图像进行平移
五、思考与总结
透明度的影响:通过改变alpha参数,我们可以看到透明度对图像叠加效果的影响。如果两个图像的差异很大,调整透明度可以帮助我们得到更好的效果。
色彩平衡和对比度的影响:如果两幅图像的色彩和亮度差异较大,可能需要进行色彩平衡和对比度的调整,以便得到更自然的效果。这可能需要使用到其他库,如OpenCV。
混合模式的影响:ImageChops模块还提供了多种混合模式,如屏幕、叠加、正片叠底等。这些混合模式可能会为叠加效果带来更多的可能性。
性能和内存使用:处理大图像时,需要考虑内存使用和性能优化。例如,可以尝试使用NumPy库来加快处理速度。
图像的质量:在叠加过程中,可能会牺牲一些图像质量。如何平衡效果和质量,是一个需要权衡的问题。
应用场景:图像叠加可以应用于很多领域,如照片处理、艺术创作、海报设计等。理解并掌握图像叠加技术,