CV2图片处理【转载

图片读取

import cv2
import numpy as np

#读入图片:默认彩色图,cv2.IMREAD_GRAYSCALE灰度图,cv2.IMREAD_UNCHANGED包含alpha通道
img = cv2.imread('1.jpg')
cv2.imshow('src',img)
print(img.shape) # (h,w,c)
print(img.size) # 像素总数目
print(img.dtype)
print(img)
cv2.waitKey()

值得注意的是,opencv读进来的图片已经是一个numpy矩阵了,彩色图片维度是(高度,宽度,通道数)。数据类型是uint8。

#gray = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE) #灰度图
#cv2.imshow('gray',gray)
#也可以这么写,先读入彩色图,再转灰度图
src = cv2.imread('1.jpg')
gray = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
print(gray.shape)
print(gray.size)
print(gray)
cv2.waitKey()
#注意,计算图片路径是错的,Opencv也不会提醒你,但print img时得到的结果是None
img2 = cv2.imread('2.jpg')
print(img2)
#如何解决“读到的图片不存在的问题”? #加入判断语句,如果为空,做异常处理
img2 = cv2.imread('2.jpg')
if img2 == None:
  print('fail to load image!')
  #opencv读入图片的矩阵格式是:(height,width,channels)。
  #而在深度学习中,因为要对不同通道应用卷积,
  #所以会采取另一种方式:(channels,height,width)。
  #注意到,opencv读入的图片的彩色图是一个channel last的三维矩阵(h,w,c),即(高度,宽度,通道)
#有时候在深度学习中用到的的图片矩阵形式可能是channel first,那我们可以这样转一下
print(img.shape)
img = img.transpose(2,0,1)
print(img.shape)

在深度学习搭建CNN时,往往要做相应的图像数据处理,比如图像要扩展维度,比如扩展成(batch_size,channels,height,width)。

对于这种要求,我们可以这么做。

#有时候还要扩展维度,比如有时候我们需要预测单张图片,要在要加一列做图片的个数,可以这么做
img = np.expand_dims(img, axis=0)
print(img.shape)
#因为opencv读入的图片矩阵数值是0到255,有时我们需要对其进行归一化为0~1
img3 = cv2.imread('1.jpg')
img3 = img3.astype("float") / 255.0 #注意需要先转化数据类型为float
print(img3.dtype)
print(img3)
#存储图片
cv2.imwrite('test1.jpg',img3) #得到的是全黑的图片,因为我们把它归一化了
#所以要得到可视化的图,需要先*255还原
img3 = img3 * 255
cv2.imwrite('test2.jpg',img3) #这样就可以看到彩色原图了

注意cv的通道是BGR

#opencv读入的矩阵是BGR,如果想转为RGB,可以这么转
img4 = cv2.imread('1.jpg')
img4 = cv2.cvtColor(img4,cv2.COLOR_BGR2RGB)
#分离通道
img5 = cv2.imread('1.jpg')
b,g,r = cv2.split(img5)
#合并通道
img5 = cv2.merge((b,g,r))
#也可以不拆分
img5[:,:,2] = 0 #将红色通道值全部设0

https://www.cnblogs.com/yinxiangnan-charles/p/5928689.html

matplotlib.image 读入图片数组,注意这里读入的数组是 float32 型的,范围是 0-1,
而 PIL.Image 数据是 uinit8 型的,范围是0-255
opencv 也是读入0-255的数据

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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库来批量处理多个图片的透明度。只需要将代码放入遍历文件列表的循环中,依次读取每个图片并进行透明度处理,最后保存处理后的图片即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值