实现替换图像中指定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区域的任务,在这里我推荐使用矩阵法(二者耗时相比较矩阵法耗时少)



相关文章
|
Linux
【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色
【PyAutoGUI操作指南】05 屏幕截图与图像定位:截图+定位单个目标+定位全部目标+灰度匹配+像素匹配+获取屏幕截图中像素的RGB颜色
1064 0
|
2月前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
58 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
4月前
|
算法 计算机视觉
基于轮廓提取的 图像填充法
这篇文章介绍了一种基于轮廓提取的图像填充法,使用CVPR2021开源的pidinet项目进行轮廓提取,再结合OpenCV的floodFill算法实现图像的动态填充和复原功能。
|
7月前
|
监控 计算机视觉
指定的颜色范围过滤出特定颜色的区域
指定的颜色范围过滤出特定颜色的区域
60 5
|
存储
通过分析 L*a*b* 颜色空间来识别织物中的不同颜色
通过分析 L*a*b* 颜色空间来识别织物中的不同颜色
129 0
|
定位技术
任意一张图片的CGCS2000坐标配准
任意一张图片的CGCS2000坐标配准
149 0
ggpattern包-基于几何图案或图像的自定义填充
平时我们做柱状图或饼图都会用彩色进行填充,但是文章有时候为了节约成本采用黑白印刷时候,图形一般都会做成各种阴影线条填充模式来进行区分(如下图),R中的ggpattern包刚好可以满足了我们的需求,若有需要就来学习下吧~
296 0
【IMAQ】imaqSetImageSize() 设置图像大小
【IMAQ】imaqSetImageSize() 设置图像大小
NV12剪切区域时的对齐代码
NV12剪切区域时的对齐代码
97 0
146.矩形区域的颜色填充
146.矩形区域的颜色填充
77 0