返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python实现生成颜色表(colorchart)
  • 949
分享到

利用Python实现生成颜色表(colorchart)

Python生成颜色表Python颜色表Python颜色 2023-05-12 15:05:51 949人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言格子颜色表渐变色带前言 在做色彩相关的算法分析时候,经常需要使用规则的颜色表来进行辅助。下面用python(numpy和OpenCV)来生成颜色表并保存为图片。 有两种类型:

前言

在做色彩相关的算法分析时候,经常需要使用规则的颜色表来进行辅助。下面用python(numpy和OpenCV)来生成颜色表并保存为图片。

有两种类型:

  • 格子形状的颜色表
  • 渐变色带

长的样子分别如下:

格子颜色表

这里需要注意,当划分的颜色数量比较少时,最好把一个颜色像素扩展成为一个格子,不然的话整个图看起来就太小了。

# -*- coding: utf-8 -*-
import cv2
import numpy as np


def generate_color_chart(block_num=18,
                         block_columns=6,
                         grid_width=32,
                         grid_height=None):
    """
    Generate color chart by unifORMly distributed color indexes, only support
    8 bit (uint8).

    Parameters
    ----------
    block_num: Block number of color chart, also the number of color indexes.
    block_columns: Column number of color chart. Row number is computed by
        block_num / block_columns
    grid_width: Width of color grid
    grid_height: Height of color grid. If not set, it will equal to grid_width.
    """
    color_index = np.linspace(0, 255, block_num)
    color_index = np.uint8(np.round(color_index))

    if grid_height is None:
        grid_height = grid_width

    # compute sizes
    block_rows = np.int_(np.ceil(block_num / block_columns))
    block_width = grid_width * block_num
    block_height = grid_height * block_num
    width = block_width * block_columns
    height = block_height * block_rows
    result = np.zeros((height, width, 3), dtype=np.uint8)

    # compute red-green block, (blue will be combined afterward)
    red_block, green_block = np.meshgrid(color_index, color_index)
    red_block = expand_pixel_to_grid(red_block, grid_width, grid_height)
    green_block = expand_pixel_to_grid(green_block, grid_width, grid_height)
    rg_block = np.concatenate([red_block, green_block], axis=2)

    # combine blue channel
    for i in range(block_num):
        blue = np.ones_like(rg_block[..., 0], dtype=np.uint8) * color_index[i]
        color_block = np.concatenate([rg_block, blue[..., np.newaxis]], axis=2)
        # compute block index
        block_row = i // block_columns
        block_column = i % block_columns
        xmin = block_column * block_width
        ymin = block_row * block_height
        xmax = xmin + block_width
        ymax = ymin + block_height
        result[ymin:ymax, xmin:xmax, :] = color_block

    result = result[..., ::-1]  # convert from rgb to bgr
    return result


def expand_pixel_to_grid(matrix, grid_width, grid_height):
    """
    Expand a pixel to a grid. Inside the grid, every pixel have the same value
    as the source pixel.

    Parameters
    ----------
    matrix: 2D numpy array
    grid_width: width of grid
    grid_height: height of grid
    """
    height, width = matrix.shape[:2]
    new_heigt = height * grid_height
    new_width = width * grid_width
    repeat_num = grid_width * grid_height

    matrix = np.expand_dims(matrix, axis=2).repeat(repeat_num, axis=2)
    matrix = np.reshape(matrix, (height, width, grid_height, grid_width))
    # put `height` and `grid_height` axes together;
    # put `width` and `grid_width` axes together.
    matrix = np.transpose(matrix, (0, 2, 1, 3))
    matrix = np.reshape(matrix, (new_heigt, new_width, 1))
    return matrix


if __name__ == '__main__':
    color_chart16 = generate_color_chart(block_num=16,
                                         grid_width=32,
                                         block_columns=4)
    color_chart18 = generate_color_chart(block_num=18,
                                         grid_width=32,
                                         block_columns=6)
    color_chart36 = generate_color_chart(block_num=36,
                                         grid_width=16,
                                         block_columns=6)
    color_chart52 = generate_color_chart(block_num=52,
                                         grid_width=8,
                                         block_columns=13)
    color_chart256 = generate_color_chart(block_num=256,
                                          grid_width=1,
                                          block_columns=16)

    cv2.imwrite('color_chart16.png', color_chart16)
    cv2.imwrite('color_chart18.png', color_chart18)
    cv2.imwrite('color_chart36.png', color_chart36)
    cv2.imwrite('color_chart52.png', color_chart52)
    cv2.imwrite('color_chart256.png', color_chart256)

渐变色带

# -*- coding: utf-8 -*-
import cv2
import numpy as np


def generate_color_band(left_colors, right_colors, grade=256, height=32):
    """
    Generate color bands by uniformly changing from left colors to right
    colors. Note that there might be multiple bands.

    Parameters
    ----------
    left_colors: Left colors of the color bands.
    right_colors: Right colors of the color bands.
    grade: how many colors are contained in one color band.
    height: height of one color band.
    """
    # check and process color parameters, which should be 2D list
    # after processing
    if not isinstance(left_colors, (tuple, list)):
        left_colors = [left_colors]
    if not isinstance(right_colors, (tuple, list)):
        right_colors = [right_colors]

    if not isinstance(left_colors[0], (tuple, list)):
        left_colors = [left_colors]
    if not isinstance(right_colors[0], (tuple, list)):
        right_colors = [right_colors]

    # initialize channel, and all other colors should have the same channel
    channel = len(left_colors[0])

    band_num = len(left_colors)
    result = []
    for i in range(band_num):
        left_color = left_colors[i]
        right_color = right_colors[i]
        if len(left_color) != channel or len(right_color) != channel:
            raise ValueError("All colors should have same channel number")

        color_band = np.linspace(left_color, right_color, grade)
        color_band = np.expand_dims(color_band, axis=0)
        color_band = np.repeat(color_band, repeats=height, axis=0)
        color_band = np.clip(np.round(color_band), 0, 255).astype(np.uint8)
        result.append(color_band)
    result = np.concatenate(result, axis=0)
    result = np.squeeze(result)
    return result


if __name__ == '__main__':
    black = [0, 0, 0]
    white = [255, 255, 255]
    red = [0, 0, 255]
    green = [0, 255, 0]
    blue = [255, 0, 0]

    gray_band = generate_color_band([[0], [255]], [[255], [0]])
    color_band8 = generate_color_band(
        [black, white, red, green, blue, black, black, black],
        [white, black, white, white, white, red, green, blue]
    )

    cv2.imwrite('gray_band.png', gray_band)
    cv2.imwrite('color_band8.png', color_band8)

到此这篇关于利用Python实现生成颜色表(color chart)的文章就介绍到这了,更多相关Python颜色表内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用Python实现生成颜色表(colorchart)

本文链接: https://lsjlt.com/news/202118.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Python实现生成颜色表(colorchart)
    目录前言格子颜色表渐变色带前言 在做色彩相关的算法分析时候,经常需要使用规则的颜色表来进行辅助。下面用python(numpy和opencv)来生成颜色表并保存为图片。 有两种类型:...
    99+
    2023-05-12
    Python生成颜色表 Python颜色表 Python颜色
  • 使用JavaScript实现随机颜色生成器
    目录项目基本结构1.颜色生成器的基本结构2.使用 HTML 添加标题3.创建用于颜色查看的显示器4.创建一个框以查看颜色代码5.创建生成器和复制按钮6.使用 JavaScript 激...
    99+
    2022-11-13
    JavaScript随机颜色生成器 JavaScript随机颜色生成 JavaScript 颜色生成
  • php如何实现随机颜色生成器
    这篇文章将为大家详细讲解有关php如何实现随机颜色生成器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。随机颜色生成器function randomColor()...
    99+
    2024-04-02
  • 利用Python实现颜色色值转换的小工具
    先看看Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函数把十进制转换成十六进制),所以遇到这样...
    99+
    2022-06-04
    小工具 颜色 Python
  • html颜色代码生成器怎么用
    今天小编给大家分享一下html颜色代码生成器怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • Android利用Palette实现提取图片颜色
    目录前言创建Palette提取颜色文字颜色自动适配更多功能总结前言 Palette即调色板这个功能其实很早就发布了,Jetpack同样将这个功能也纳入其中,想要使用这个功能,需要先依...
    99+
    2024-04-02
  • Android编程实现随机生成颜色的方法示例
    本文实例讲述了Android编程实现随机生成颜色的方法。分享给大家供大家参考,具体如下:网上有个ColorPicker开源项目,选择颜色值。而在这里我想实现的是动态修改一个view的背景色。开一个线程,每隔1s修改一次view的背景色。我们...
    99+
    2023-05-30
    android 随机 颜色
  • 利用Python生成Excel炫酷图表
    目录前言1.xlswriter库2.生成折线图3.生成柱状图4.生成饼图5.实战拓展前言 本文对Python 自动化操作Excel并生成图表,做了详细的分析和说明 我们先来看一下py...
    99+
    2024-04-02
  • Python实现提取图片中颜色并绘制成可视化图表
    目录导入模块并加载图片提取颜色并整合成表格绘制图表实战环节今天小编来为大家分享一个有趣的可视化技巧,如何从图片中提取颜色然后绘制成可视化图表,如下图所示 在示例照片当中有着各种各样...
    99+
    2024-04-02
  • Android中怎么利用ProgressBar实现颜色渐变
    Android中怎么利用ProgressBar实现颜色渐变,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1 . 上面的样式只是实现了颜色渐变,但它旋转和呈现的方式仍然是一个...
    99+
    2023-05-30
  • Python实现双色球号码随机生成
    目录1. 随机一注2. 红球固定或蓝球固定红球固定蓝球固定3. 爬取中奖号码4. 是否中奖5. 总结一下大家好,我是煎蛋哥! 上篇文章聊到了 Python 实现大乐透彩票自由的完整流...
    99+
    2024-04-02
  • 利用Python实现自动生成小学生计算题
    目录生成计算题写入Word中过年期间发现小外甥已经上小学了,我姐说老师今天给他们布置了寒假作业:每天坚持做乘法和加减法混合运算。 这我必须帮帮忙,用Python写了一段自动生成小学生...
    99+
    2023-02-07
    Python生成计算题 Python计算题
  • 如何利用JS动态生成隔行换色HTML表格
    这篇文章将为大家详细讲解有关如何利用JS动态生成隔行换色HTML表格,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用JS生成动态生成表格,行、列由用户输入,并使表格隔行换...
    99+
    2024-04-02
  • 利用Python脚本生成sitemap.xml的实现方法
    安装lxml 首先需要pip install lxml安装lxml库。 如果你在ubuntu上遇到了以下错误: #include "libxml/xmlversion.h" compilation ...
    99+
    2022-06-04
    脚本 方法 Python
  • 利用Python实现自动生成数据日报
    目录前言需求详解数据处理前言 人生苦短,快学Python! 日报,是大部分打工人绕不过的难题。 对于管理者来说,日报是事前管理的最好抓手,可以了解团队的氛围和状态。可对于员工来说,那...
    99+
    2024-04-02
  • php怎么实现表格两种颜色
    本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑php怎么实现表格两种颜色?【PHP】简单的隔行颜色区分表格的实现<html> <head> <title>Creating tabl...
    99+
    2020-10-10
    php 表格
  • php如何实现表格两种颜色
    这篇文章主要为大家分析了php如何实现表格两种颜色的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“php如何实现表格两种颜色”的知识吧。php实现表格两种颜色...
    99+
    2023-06-28
  • 利用Python 生成hash值
    一、介绍 如果在Python中需要对用户输入的密码或者其他内容进行加密,首选的方法是生成hash值。 在Python中可以利用二个模块来进行: - crypt - hashlib 二、crypt (一)crypt的主要方法和...
    99+
    2023-01-31
    Python hash
  • 怎么在python中利用生成器实现协程
    这篇文章给大家介绍怎么在python中利用生成器实现协程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于...
    99+
    2023-06-14
  • python 使用turtle实现实时钟表并生成exe
    源代码 python引入两个内置库turtle和datetime即可制作一个实时钟表,代码如下: # 用turtle画时钟 # 以自定义shape的方式实现 import turt...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作