实现替换图像中指定RGB色值区域

简介: 实现替换图像中指定RGB色值区域

前言


  在处理图像中我们有时候需要将某张图像的背景替换掉,或者将某张图像中指定的RGB颜色替换成另外的一种RGB。为此,我在这里提供两种实现方案供大家选用。



遍历法


  使用遍历法替换掉图像中的指定RGB。


流程:


  1. 读取图像


  1. 转为np.asarray


  1. 构建for循环遍历RGB三层值


  1. find(指定值) == 修改值


  1. 输出图像


def replace_color(img, old_rgb, new_rgb):
    # 通过遍历颜色替换程序
    img_arr = np.asarray(img, dtype=np.double)
    new_arr = img_arr.copy()
    for i in range(img_arr.shape[1]):
        for j in range(img_arr.shape[0]):
            if (img_arr[j][i] == old_rgb)[0] == True:
                new_arr[j][i] = new_rgb
    return np.asarray(new_arr, dtype=np.uint8)


矩阵法


  RGB图像是由三层RGB矩阵组合而成,我们在替换指定的RGB时候可以将原图像的三层RGB分离出来,对每层矩阵中的值搜索替换即可。


流程:


  1. 读取图像


  1. 分离原图RGB三层空间


  1. 对分离出来的三层空间编码


  1. 索引并替换颜色


  1. 组合替换后的三层空间成完整的图
def replace_color(img, old_rgb, new_rgb):
    #  通过矩阵操作颜色替换程序
    img_arr = np.asarray(img, dtype=np.double)
    # 分离通道
    r_img = img_arr[:, :, 0].copy()
    g_img = img_arr[:, :, 1].copy()
    b_img = img_arr[:, :, 2].copy()
    # 编码
    img = r_img * 256 * 256 + g_img * 256 + b_img
    old_color = old_rgb[0] * 256 * 256 + old_rgb[1] * 256 + old_rgb[2]
    # 索引并替换颜色
    r_img[img == old_color] = new_rgb[0]
    g_img[img == old_color] = new_rgb[1]
    b_img[img == old_color] = new_rgb[2]
    # 合并通道
    new_img = np.array([r_img, g_img, b_img], dtype=np.uint8)
    # 将数据转换为图像数据(h,w,c)
    new_img = new_img.transpose(1, 2, 0)
    return new_img


结果


这两种方法都可以完成替换RGB区域的任务,在这里我推荐使用矩阵法(二者耗时相比较矩阵法耗时少)



相关文章
|
11月前
|
Linux
【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色
【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色
580 0
|
4月前
|
C++
[Halcon&定位] 解决Roi区域外的模板匹配成功
[Halcon&定位] 解决Roi区域外的模板匹配成功
60 0
|
9月前
|
存储
通过分析 L*a*b* 颜色空间来识别织物中的不同颜色
通过分析 L*a*b* 颜色空间来识别织物中的不同颜色
66 0
|
9月前
|
存储 编解码 对象存储
将图像标记器多边形转换为标记的块图像以进行语义分割
将存储在对象中的多边形标签转换为适用于语义分割工作流的标记阻止图像。 可以使用计算机视觉工具箱中的图像标记器应用来标记太大而无法放入内存和多分辨率图像的图像。有关详细信息,请参阅在图像标记器(计算机视觉工具箱)中标记大图像。图像标记器应用不支持对被阻止的图像进行像素标记。您只能使用 ROI 形状(如多边形、矩形和线条)创建标签。此示例演示如何使用函数将多边形 ROI 转换为像素标记的块图像,以进行语义分割工作流。
45 0
将图像标记器多边形转换为标记的块图像以进行语义分割
|
9月前
使用边界跟踪方法标识图像中的圆形目标
使用边界跟踪方法,根据对象的圆度对其进行分类。
54 0
|
10月前
ggpattern包-基于几何图案或图像的自定义填充
平时我们做柱状图或饼图都会用彩色进行填充,但是文章有时候为了节约成本采用黑白印刷时候,图形一般都会做成各种阴影线条填充模式来进行区分(如下图),R中的ggpattern包刚好可以满足了我们的需求,若有需要就来学习下吧~
154 0
【IMAQ】imaqSetImageSize() 设置图像大小
【IMAQ】imaqSetImageSize() 设置图像大小
NV12剪切区域时的对齐代码
NV12剪切区域时的对齐代码
72 0
|
JavaScript 前端开发
利用 clip-path 实现动态区域裁剪
利用 clip-path 实现动态区域裁剪
216 0
利用 clip-path 实现动态区域裁剪
|
算法 计算机视觉 数据格式
用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积
Python + Opencv2 实现轮廓提取,轮廓区域面积计算; 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记;轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算。
用 Python 对图片主体轮廓进行提取、颜色标记、并计算区域面积