python opencv如何读取透明png图片以及如何编辑透明度

python OpenCV中

cv2.imread(img_path)默认会读取BGR图像,即3通道图像,读出的图像尺寸为h,w,c。cv2.resize(img, (w,h)),resize中的尺寸是w,h和imread读出来的hw是相反的

cv2.imread(img_path,0): 读取灰度图像

cv2.imread(img_path, cv2.IMREAD_UNCHANGED) : 读取BGR+alpha通道,共4通道原始图(注意,png格式图像有4个通道,jpg图像本身只有3个通道,只会读出3通道),alpha通道用于表示透明度,使用该方法读取则能读到png图像中的透明度。

 

实际上,我们也可以手动对alpha通道进行修改,从而修改图片的透明程度,或者直接在BGR图像上添加alpha通道,来添加透明度。

img = cv2.imread(img_path)

b_channel, g_channel, r_channel = cv2.split(img)

alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 100  # alpha通道每个像素点区间为[0,255], 0为完全透明,255是完全不透明

img_BGRA = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))

cv2.imwrite(img_path)

 

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 您好,可以使用cv2中的addWeighted函数来批量处理图片透明度。具体操作可以参考以下代码: ```python import cv2 import os # 设置透明度 alpha = .5 # 遍历文件夹中的所有图片 for filename in os.listdir('path/to/folder'): # 读取图片 img = cv2.imread(os.path.join('path/to/folder', filename), cv2.IMREAD_UNCHANGED) # 提取 alpha 通道 alpha_channel = img[:, :, 3] # 将 alpha 通道转换为三通道 alpha_channel = cv2.cvtColor(alpha_channel, cv2.COLOR_GRAY2BGR) # 将 alpha 通道的值乘以透明度 alpha_channel = alpha * alpha_channel.astype(float) / 255 # 将 alpha 通道转换回灰度图像 alpha_channel = cv2.cvtColor(alpha_channel.astype(np.uint8), cv2.COLOR_BGR2GRAY) # 将 alpha 通道赋值回原图像 img[:, :, 3] = alpha_channel # 保存处理后的图片 cv2.imwrite(os.path.join('path/to/folder', filename), img) ``` 希望对您有所帮助。 ### 回答2: 要使用cv2库批量处理图片透明度,首先需要加载cv2库并导入所需的其他库: ```python import cv2 import os ``` 接下来,我们可以使用os库提供的功能列出文件夹中所有的图片文件: ```python folder_path = "文件夹路径" file_list = os.listdir(folder_path) ``` 然后,我们可以使用一个循环来遍历文件列表,在每个图片上执行透明度处理操作。首先,我们需要读取每个图片并将其转换为RGBA格式(带有透明度通道): ```python for file_name in file_list: file_path = os.path.join(folder_path, file_name) image = cv2.imread(file_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA) ``` 接下来,我们可以对图片透明度进行处理,例如将透明度通道的值都设为128(半透明): ```python alpha = 128 image[:, :, 3] = alpha ``` 最后,我们可以将处理后的图片保存到指定位置: ```python output_file_path = "输出文件路径" + file_name cv2.imwrite(output_file_path, image) ``` 完整的代码如下: ```python import cv2 import os folder_path = "文件夹路径" file_list = os.listdir(folder_path) for file_name in file_list: file_path = os.path.join(folder_path, file_name) image = cv2.imread(file_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGBA) # 图片透明度处理 alpha = 128 image[:, :, 3] = alpha output_file_path = "输出文件路径" + file_name cv2.imwrite(output_file_path, image) ``` 这样,就可以使用cv2库批量处理图片透明度了。 ### 回答3: 使用cv2库批量处理图片透明度的步骤如下: 1. 导入cv2库和numpy库。 2. 使用cv2的imread函数读取图片,将读取到的图片保存在一个变量中。 3. 创建一个遍历文件列表的循环,用于处理多个图片。 4. 在遍历循环内,通过cv2的cvtColor函数将读取到的图片转换为BGRA(Blue, Green, Red, Alpha)模式,其中Alpha通道用于表示图片透明度。 5. 使用numpy的slice操作获取Alpha通道的数值,将其乘以一个百分比(例如0.5)来改变图片透明度。 6. 将修改后的Alpha通道再次赋值给图片的相应位置。 7. 使用cv2的cvtColor函数将修改后的图片转换回BGR(Blue, Green, Red)模式。 8. 使用cv2的imwrite函数将处理后的图片保存到指定的路径。 以下是示例代码: ```python import cv2 import numpy as np # 读取原始图片 image = cv2.imread('input_image.png', cv2.IMREAD_UNCHANGED) # 设置透明度百分比 alpha_percentage = 0.5 # 获取Alpha通道 alpha_channel = image[:, :, 3] # 修改透明度 alpha_channel *= alpha_percentage # 赋值修改后的Alpha通道 image[:, :, 3] = alpha_channel # 转换回BGR模式 image = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR) # 保存处理后的图片 cv2.imwrite('output_image.png', image) ``` 通过以上步骤和示例代码,你可以使用cv2库来批量处理多个图片透明度。只需要将代码放入遍历文件列表的循环中,依次读取每个图片并进行透明度处理,最后保存处理后的图片即可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值