使用opencv中的merge()函数为BGR图像添加alpha通道【额外再附一个手绘图抠图的例子】

您所在的位置:网站首页 R语言merge函数 使用opencv中的merge()函数为BGR图像添加alpha通道【额外再附一个手绘图抠图的例子】

使用opencv中的merge()函数为BGR图像添加alpha通道【额外再附一个手绘图抠图的例子】

2023-02-28 09:37| 来源: 网络整理| 查看: 265

先上代码:

#!/usr/bin/env python # -*- coding: utf-8 -*- # 图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782 # 图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601 # OpenCV的版本为4.1 import cv2 as cv import sys import numpy as np import matplotlib.pyplot as plt if __name__ == '__main__': # 读取图像并判断是否读取成功 img = cv.imread('../images/food-01.jpg') if img is None: print('Failed to read food-01.jpg.') sys.exit() else: # 使用cv.merge()函数添加alpha通道 zeros = np.ones(img.shape[:2], dtype=img.dtype) * 100 result_BGR_alpha = cv.merge([img, zeros]) print('原图的通道数为:{}'.format(img.shape[2])) print('处理后的通道数为:{}'.format(result_BGR_alpha.shape[2])) # 图像保存到硬盘 cv.imwrite('../results/food-01.png', result_BGR_alpha) # 以下代码为图像展示 # 因为opencv的颜色通道顺序为[B,G,R],而matplotlib的颜色通道顺序为[R,G,B], # 所以作图前要先进行通道顺序的调整。 result_RGB_alpha = result_BGR_alpha[:, :, (2, 1, 0, 3)] img_RGB = img[:, :, (2, 1, 0)] # 以下开始绘制图形并显示 plt.figure() plt.subplot(1, 2, 1) # 将画板分为一行两列,接下来要绘的图位于第一个位置 plt.title('Original image') plt.imshow(img_RGB) plt.subplot(1, 2, 2) # 将画板分为一行两列,接下来要绘的图位于第二个位置 plt.title('Add alpha channel image') plt.imshow(result_RGB_alpha) plt.show()

运行结果如下图所示: 下面对程序进行说明。 1 图像的alpha通道有什么用? 答:一个图像的每个像素都有 BGR 三个通道,后来有个名叫Alvy Ray Smith 提出每个像素再增加一个 Alpha 通道,取值为0到1(当然,在咱们程序中是从0到255),用来储存这个像素是否对图片有「贡献」,0代表透明、1或255代表不透明。也就是说,「Alpha 通道」储存一个值,这个值与原图像中的值作了运算后,其外在表现是「透明度」。 当然,简单的理解就是Alpha 通道可以控制图像的透明度。

2 opencv中的merge()函数用于合并若干个相同尺寸(size)和深度(depth)的矩阵。 merge()函数的原型有两种,分别介绍如下: 第一种原型: C++

Python:

参数意义如下: mv—input array of matrices to be merged; all the matrices in mv must have the same size and the same depth.(翻译:将要被合并的矩阵数组,矩阵数组中的每个矩阵都要相同的尺寸和深度,什么叫矩阵数组?下面代码中的“channels”就是一个矩阵数组,它由3个矩阵元素组成,这3个矩阵元素分别为m1、m2、m3)

Mat m1 = (Mat_(2,2)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3