山东大学数字图像处理实验一:python版本
实验工具:pycharm
实验要求:
1)利用图像库的功能,实现从文件加载图像,并在窗口中进行显示的功能;
2)利用常见的图像文件格式(.jpg; .png; .bmp; .gif)进行测试。
实验代码:
import cv2
# 读取并显示图像
img = cv2.imread("a.png")
# 接着创建一个窗口
cv2.namedWindow("Image")
# 显示图像
cv2.imshow("Image", img)
# 等待按键用来展示图片
cv2.waitKey(0)
# 释放窗口
cv2.destroyAllWindows()
可是报错 libpng warning: iCCP: known incorrect sRGB profile
问题原因:新版的libpng增强了检查,这个警告可以忽略不计
问题解决:在网上下载ImageMagick,将出现警告的图片用ImageMagick打开再保存即可。
下载地址:https://imagemagick.org/script/download.php
再次运行,成功
实验要求:
1)现有一张4通道透明图像a.png:
2)从其中提取出alpha通道并显示;
3)用alpha混合,为a.png替换一张新的背景(bg.png)
实验代码:
import cv2 as cv
import numpy as np
imgSrcA = cv.imread('a.png', cv.IMREAD_UNCHANGED)
imgSrcBg = cv.imread('bg.png', cv.IMREAD_UNCHANGED)
cv.imshow('alpha src', imgSrcA)
rows, cols, channels = imgSrcA.shape
B, G, R, A = cv.split(imgSrcA)
imgAlpha = np.zeros([rows, cols, 3], dtype='uint8')
for k in range(3):
imgAlpha[:, :, k] = A[:, :]
cv.imshow('alpha channel', imgAlpha)
# 不包含alpha通道
imgSrcA = cv.imread('a.png')
imgMix = np.zeros([rows, cols, 3], dtype='uint8')
for i in range(rows):
for j in range(cols):
alpha = A[i][j] / 255
beta = 1 - alpha
for k in range(3):
temp = int(imgSrcA[i, j, k]*alpha + imgSrcBg[i, j, k]*beta)
if temp > 255:
imgMix[i, j, k] = 255
elif temp < 0:
imgMix[i, j, k] = 0
else:
imgMix[i, j, k] = temp
cv.imshow('mixed image', imgMix)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
依次出现下面三幅图,成功