Byakuren:一个 C 实现的主题色提取库「建议收藏」

Byakuren:一个 C 实现的主题色提取库

大家好,又见面了,我是全栈君。

原文地址: https://xcoder.in/2017/03/03/…

好久没发文章了,借着 Byakuren 开源的档口炒炒冷饭吧。

先上 Repo 地址:https://github.com/XadillaX/byakuren。

主题色

图像主题色是从一张图像中提取出来最能代表这张图片主色调的多种颜色。 也就是说在一幅色彩斑斓的图片里面,各种不同颜色的数量就对应着该颜色在图 片中的比例,程序可以通过计算图片中不同颜色的像素数来算出主题色。

主题色提取算法

提取的算法在我之前的博客中有说明。在 Byakuren 中其实用的就是之前博客中讲的一些算法。

除去上面两种算法, Byakuren 还提供了将这两种算法结合起来的 Mix 算法。

Byakuren

Byakuren 是我前两年写的一个主题色提取库,也是继 thmclrx 之后的 C 版实现,个人认为代码质量比旧版的 thmclrx 要高。并且它实际上经过了企业级的验证,在某相关的公司已经欢快跑了有些年头了。

在经过相关人员的同意下,我也算把这雪藏了好久的代码给开源出来了。

伪·Byakuren 是什么?

byakuren

聖 白蓮(ひじり びゃくれん, Hiziri Byakuren )是系列作品《东方 project 》中的角色,首次登场于《东方星莲船》。

  • 种族:魔法使

  • 能力:使用魔法程度的能力(酣畅增强身体能力的)

  • 危险度:不明

  • 人类友好度:中

  • 主要活动场所:命莲寺之类

  • 命莲寺的住持。虽然原本是人类,不过由于常年的修行已经完全超越了人类。现在已经属于人们常说的魔法使了。

虽然已经入了佛门,但是不知道什么原因却被妖怪敬仰着。她从来没有像童话故事中的魔法使那样,念诵着咒语治退妖怪。使用的力量完全是邪恶的,一点都不像是圣人,虽然并没有人目击到她与人类为敌,但其实已彻底成为妖怪的同伴了。

好吧,总之本人是个东方控,所以基本上项目名都跟东方有关。

真·Byakuren 是什么?

如文章题目所说,它是一个 C 实现的开源主题色提取的库,大家可以把它编译成链接库使用。

不过目前暂时只支持 Makefile 的形式来编译,大家如果有兴趣也可以自己建个 Windows 下的 Visual Studio 项目等,也欢迎提类似于 CMake 之类的 PR 。

使用

其实详细的使用方法在文档中就有说明。

不过这里还是简单介绍一下吧。

Clone

先把代码给下下来,你也可以把它 Clone 下来。总之仓库地址是:https://github.com/XadillaX/byakuren。

make

然后跑到目录下执行 make。

$ make byakuren

你将得到一个 byakuren.a 的静态链接库。

这个时候你只要拿着这个静态链接库,然后顺便在你的项目中把头文件引进来就可以了。

#include "byakuren.h"

API

我们假设你有 bkr_rgb* rgb 的图片像素信息,以及 uint32_t color_count 的图片像素总数两个变量,下面分别给出三个样例。具体的 API 解析还请去文档观摩。

Octree
bkr_color_stats stats[256];
bkr_octree_node* root = bkr_build_octree(rgb, color_count, 256);
int colors = bkr_octree_calculate_color_stats(root, stats);
bkr_release_octree(root);

colors 就是主题色数量了,传进去的 stats 就会接收到主题色的具体信息了。

Min-diff
bkr_color_stats stats[256];
bkr_mindiff_parameter param;
param.gray_offset = 5;
param.palette = NULL;
int colors = bkr_mindiff_calculate_color_stats(rgb, color_count, stats, &param);

colors 和 stats 如上所述。

Mix
bkr_color_stats stats[256];
bkr_mindiff_parameter param;
param.gray_offset = -1;
param.palette = NULL;
int colors = bkr_mix_calculate_color_stats(rgb, color_count, 256, &param, stats);

colors 和 stats 如上所述。

预览一下

可能有人想看看效果,我这里就放个效果图给大家看看吧。

其中 Octree 和 Mix 两个算法的主题色最大数量参数传的都是 16 。

效果预览

能做什么?

你可以拿它来写一些主题色提取的东西。

你也可以拿它来完成其它语言的主题色提取库的封装,如 Python 、 Lua 等等。欢迎反馈给我。

结束语

把一份自己觉得还不错的代码开源出来的感觉特爽,尤其是这种重见天日的感觉。ヘ|・∀・|ノ*~●

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108638.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python面试题及答案_微型计算机原理与接口第四版答案

    python面试题及答案_微型计算机原理与接口第四版答案题目目录什么是接口测试?为什么要做接口测试/接口测试有哪些优势?请问你们公司是如何做接口测试的?怎么设计接口测试用例?没有接口文档如何做接口测试?怎么区分bug是前端还是后端的bug?常用的接口测试工具?接口之间数据依赖如何处理?依赖于第三方数据的接口如何进行测试?你平常做接口测试的过程中发现过哪些bug?当接口出现异常时候,你是如何分析异常的?什么是接口测试?接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求测试的重点是

    2022年9月26日
  • 二叉树的五大性质及证明「建议收藏」

    二叉树的五大性质及证明「建议收藏」二叉树(BinaryTree)定义:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。特点:每个结点至多只有两棵子树(二叉树中不存在度大于2的结点)五种形态: 1.性质1性质1 在二叉树的第i层至多有2^(i-1)个结点。(i>=1) [用数学归纳法证明]  …

    2022年5月18日
  • helm安装redis-cluster

    helm安装redis-cluster

    2021年5月14日
  • Java指令编译java文件

    Java指令编译java文件Java指令编译java文件1.进入cmd2.编译2.1切换不同JDK编译文件3.运行1.进入cmd如何快速进入/打开cmd–快捷键在源代码目录输入cmd,然后回车2.编译如果出现错误:编码GBK的不可映射字符(0x8D)需要在javac后面加上-encodingUTF-8javac-encodingUTF-8编译的文件.java这时候就会多出.class文件,就是字节码文件了。2.1切换不同JDK编译文件一般JDK配置好了,直接用javac

    2022年6月12日
  • 三立[通俗易懂]

    三立[通俗易懂]自传173、在佳木斯上网写作2013年1—-互动百科二零一三年一月起,我在佳木斯市的上网写作进入了第七年时间,钰香妻在市健身房练打乒乓球,照看外孙女和管理家务吃喝用穿。大女儿女婿在厦门外国语学校,二女儿女婿在本市文化公司上班。儿子在大连工业大学,儿媳在大连银行,孙女在北京上大学二年。2013、1、1星期二写《新年(七古)》:平平静静日历翻,新页…

    2022年5月4日
  • 整数转换为罗马字符串_字符型转换成int型

    整数转换为罗马字符串_字符型转换成int型给定一个整数数字s,(1罗马数字I,II,III,IV,V分别代表数字1,2,3,4,5。 格式:   第一行输入一个整数,接下来输出对应的罗马数字。 首先要来了解一下罗马数字表示法,基本字符有7个:I,V,X,L,C,D,M,分别表示1,5,10,50,100,500,1000。 在构成数字的时候,有下列规则:

    2022年9月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号