Python 对图片RGB进行分离与重组

图片组成

[
[[245 227 220]
[245 226 219]
[245 227 220]

[ 82 123 78]
[ 83 125 78]
[ 88 131 80]],
[[

]],

]

分离RGB值

def writeFile(X,filename):
    if filename!="":
        with open(filename,"w")as f:
            json.dump(X,f,indent=4)
def getMatrixRGB(f,mode="r",filename=""):
    X = []
    for i,v1 in enumerate(f):
        x1 = []
        for j,v2 in enumerate(v1):
            x2= []

            if mode == "r":
                x2.append(int(v2[2]))
            elif mode == "g":
                x2.append(int(v2[1]))
            elif mode == "b":
                x2.append(int(v2[0]))
            else:
                pass
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename)
    return X

[
    [
        [220],
        [ ....]
                ],
       ........
                ]

##合并RGB值,复原图像

def comp_Matrix_RGB(r,g,b):
    X = []
    for i,v1 in enumerate(r):
        x1 = []
        for j,v2 in enumerate(v1):
            x2 = [b[i][j][0],g[i][j][0],r[i][j][0]]
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename="comp.txt")
    return(X)

完整代码

import cv2
import numpy as np
import json
import pickle

def train(X,y,filename=""):
    reg = LinearRegression()
    reg.fit(X,y)
    #print(reg.coef_)
    #print(reg.intercept_)
    print(reg.score(X,y))
    pickle.dump(reg,open("filename","wb"))

 
def writeFile(X,filename):
    if filename!="":
        with open(filename,"w")as f:
            json.dump(X,f,indent=4)

def getMatrixRGB(f,mode="r",filename=""):
    X = []
    for i,v1 in enumerate(f):
        x1 = []
        for j,v2 in enumerate(v1):
            x2= []

            if mode == "r":
                x2.append(int(v2[2]))
            elif mode == "g":
                x2.append(int(v2[1]))
            elif mode == "b":
                x2.append(int(v2[0]))
            else:
                pass
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename)
    return X

def comp_Matrix_RGB(r,g,b):
    X = []
    for i,v1 in enumerate(r):
        x1 = []
        for j,v2 in enumerate(v1):
            x2 = [b[i][j][0],g[i][j][0],r[i][j][0]]
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename="comp.txt")
    return(X)


def change_Matrix_RGB(r,g,b,p=0.8):
    X = []
    for i,v1 in enumerate(r):
        x1 = []
        for j,v2 in enumerate(v1):
            x2 = [b[i][j][0]*p,g[i][j][0]*p,r[i][j][0]*p]
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename="comp.txt")
    return(X)

#154,133,3
def main(file1):
    """
    [[[245 227 220]
      [245 226 219]
      [245 227 220]
      ...
      [ 82 123  78]
      [ 83 125  78]
      [ 88 131  80]]

    """

    f1 = cv2.imread(file1)
    X_r = getMatrixRGB(f1,mode="r",filename="X_r.txt")
    X_g = getMatrixRGB(f1,mode="g",filename="X_g.txt")
    X_b = getMatrixRGB(f1,mode="b",filename="X_b.txt")

    img_mat = comp_Matrix_RGB(X_r,X_g,X_b)
    img_mat_ = change_Matrix_RGB(X_r,X_g,X_b)
    img = np.array(img_mat)
    img_ = np.array(img_mat_)
    #print ((f1 == img).all())
    cv2.imwrite("comp.png",img)
    cv2.imwrite("comp_.png",img_)
    
if __name__=="__main__":
    p1="22.png"
    main(p1)

X_r ,X_g, X_b

在这里插入图片描述

comp.png

请添加图片描述

对图像进行变换处理

rgb*0.8
def change_Matrix_RGB(r,g,b,p=0.8):
    X = []
    for i,v1 in enumerate(r):
        x1 = []
        for j,v2 in enumerate(v1):
            x2 = [b[i][j][0]*p,g[i][j][0]*p,r[i][j][0]*p]
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename="comp.txt")
    return(X)

在这里插入图片描述

rgb;b&g = 0
def change_Matrix_RGB(r,g,b):
    X = []
    for i,v1 in enumerate(r):
        x1 = []
        for j,v2 in enumerate(v1):
            x2 = [0,0,r[i][j][0]]  # b,g,r顺序
            x1.append(x2)
        X.append(x1)
    writeFile(X,filename="comp.txt")
    return(X)

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个使用Python实现通过RGB图像和深度信息对图像进行预处理的示例代码: ```python import cv2 import numpy as np # 读取RGB图像和深度图像 rgb_img = cv2.imread('rgb_image.jpg') depth_img = cv2.imread('depth_image.jpg', cv2.IMREAD_GRAYSCALE) # 将深度图像转换为真实深度(单位:米) depth_scale = 0.001 # 深度图像中像素值的缩放因子 depth_img = depth_scale * depth_img.astype(np.float32) # 根据深度信息过滤图像 min_depth = 0.5 # 最小距离(单位:米) max_depth = 5.0 # 最大距离(单位:米) mask = np.logical_and(depth_img > min_depth, depth_img < max_depth) filtered_img = np.zeros_like(rgb_img) filtered_img[mask] = rgb_img[mask] # 对过滤后的图像进行预处理 processed_img = cv2.cvtColor(filtered_img, cv2.COLOR_BGR2GRAY) processed_img = cv2.GaussianBlur(processed_img, (5, 5), 0) # 显示结果 cv2.imshow('RGB Image', rgb_img) cv2.imshow('Depth Image', depth_img) cv2.imshow('Filtered Image', filtered_img) cv2.imshow('Processed Image', processed_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码首先读取RGB图像和深度图像。然后,将深度图像转换为真实深度(单位:米)。接着,根据深度信息过滤图像,只保留距离在最小距离和最大距离之间的像素。随后,对过滤后的图像进行预处理,包括将其转换为灰度图像并进行高斯模糊。最后,将结果显示出来。 需要注意的是,上述代码中的深度图像使用的是OpenCV中的IMREAD_GRAYSCALE模式读取,因此读取的是一个单通道的灰度图像。如果深度图像是一个三通道的RGB图像,则需要对其进行通道分离并对每个通道进行处理。另外,上述代码中的距离单位是米,如果深度图像的单位不同,则需要相应地调整深度缩放因子。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值