IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 自己python实现单通道图像转成三通道及原理(2种方式) -> 正文阅读

[人工智能]自己python实现单通道图像转成三通道及原理(2种方式)

1. 方式一原理
假设灰度图Gray的像素值为 f。则,r,g,b分量的像素值为r=g=b=f
实现代码:

'''
单通道->三通道
'''
import os
import cv2
import numpy as np
import PIL.Image as Image
import os
#os.environ['CUDA_VISIBLE_DEVICES'] = '2'
img_path='/home/gyx/QR/qr_detect_model/dataset/images_all_channel_1/'
save_img_path='/home/gyx/QR/qr_detect_model/dataset/images_all_channel_3/'
for img_name in os.listdir(img_path):
   image=Image.open(img_path+img_name)
   if len(image.split())==1: #查看通道数
       print(len(image.split()))
       print(img_path+img_name)
       img = cv2.imread(img_path+img_name)
       gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
       img2 = np.zeros_like(img)
       img2[:,:,0] = gray
       img2[:,:,1] = gray
       img2[:,:,2] = gray
       cv2.imwrite(save_img_path+img_name, img2)
       image=Image.open(save_img_path+img_name)
       print(len(image.split()))
   else:
       image.save(save_img_path+img_name)

'''
单通道->三通道
'''
#img_src = np.expand_dims(img_src, axis=2)
#img_src = np.concatenate((img_src, img_src, img_src), axis=-1)

参考链接

2. 方式二原理:
假设灰度图Gray的像素值为 f。则,r,g,b分量的像素值为
在这里插入图片描述
方式二代码实现

import os
import cv2
import numpy as np
import math
from PIL import Image

# 方法2:公式换算各个像素点
def Pixel_rule(gray_pixel):
    if(gray_pixel >=0 and gray_pixel <=63):
        r = 0
        g = 254-4*gray_pixel
        b = 255
    elif(gray_pixel >=64 and gray_pixel <=127):
        r = 0
        g = 4*gray_pixel-254
        b = 510-4*gray_pixel
    elif(gray_pixel >=128 and gray_pixel <=191):
        r = 4*gray_pixel-510
        g = 255
        b = 0
    elif(gray_pixel >=192 and gray_pixel <=255):
        r = 255
        g = 1022-4*gray_pixel
        b = 0
    return [r, g, b]

# 方法1:暴力换算,直接让r,g,b与单通道像素点相等
def Pixel_rule2(gray_pixel):
    r = gray_pixel
    g = gray_pixel
    b = gray_pixel
    return [r, g, b]

def Gray2RGB(img):
    gray = cv2.imread(path1)   # 单通道灰度图读入
    W,H = gray.shape[:2]   # 保存原图像的宽度与高度

    d0 = np.array(Image.open(path1))  # 将原单通道图像转换成像素值
    print(d0.shape, d0.dtype)
    print(d0)


    dr = np.zeros([W, H])  # 与图大小相同的数组分别存r,g,b三个像素的像素值矩阵
    dg = np.zeros([W, H])
    db = np.zeros([W, H])
    three_Channel = np.zeros([W, H, 3])  # 定义三维数组存储新的三通道像素值


    for i in range(1, W - 1):
        for j in range(1, H-1):  # 遍历原灰度图的每个像素点
            [dr[i, j], dg[i, j], db[i, j]] = Pixel_rule(gray_pixel=d0[i, j])  # 将每个像素点的灰度值转换成rgb值(此处可以选择转换规则1或者2)
            three_Channel[i, j] = np.array([dr[i, j], dg[i, j], db[i, j]])

    print(three_Channel.shape, three_Channel.dtype)
    print(three_Channel)
    result = Image.fromarray(three_Channel.astype('uint8'))
    return result

# 读入路径
path1 = 'D:/desktop/DWT DCT watermark/dataset/gray/0/0_10.jpg'    #  path1路径改为文件夹上一层路径
path2 = "D:/desktop/DWT DCT watermark/dataset/RGB2gray/0/0_10.jpg"  # path2改为保存目录的根路径

img = cv2.imread(path1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
result = Gray2RGB(img=gray)
# 生成RGB图像保存路径
result.save(path2)
# result.save("new_"+path)

思路简单,但debug不易!!!哈哈,小段代码实现花了4个小时
3.效果图:
(原始lena图像灰度图):
在这里插入图片描述
(方式一lena图像三通道图):
在这里插入图片描述
(方式二lena图像三通道图):
在这里插入图片描述
4.总结:
方式一在实现后效果与灰度图无异,看起来仍然是灰度图(方式一的实现也可以调用相应的openCV系统函数实现),但实际已经由单通道——>三通道。
方式二在实现后效果与灰度图有明显区别,看起也是RGB图像。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:38:31  更:2022-05-18 17:39:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:35:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码