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);

colorsstats 如上所述。

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);

colorsstats 如上所述。

预览一下

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

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

效果预览

能做什么?

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

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

结束语

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Pytorch(五)入门:DataLoader 和 Dataset

    Pytorch(五)入门:DataLoader 和 DatasetDataLoader和Dataset构建模型的基本方法,我们了解了。接下来,我们就要弄明白怎么对数据进行预处理,然后加载数据,我们以前手动加载数据的方式,在数据量小的时候,并没有太大问题,但是到了大数据量,我们需要使用shuffle,分割成mini-batch等操作的时候,我们可以使用PyTorch的API快速地完成这些操作。Dataset是一个包装类,用来将数据包装为Datas…

  • floor报错注入原理_sql报错注入

    floor报错注入原理_sql报错注入floor()报错注入准确地说应该是floor,count,groupby冲突报错是当这三个函数在特定情况一起使用产生的错误。首先看经典的floor注入语句:andselect1from(selectcount(*),concat(database(),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a)第一眼看…

  • gamma分布的分布函数_gamma分布和beta分布

    gamma分布的分布函数_gamma分布和beta分布1.Gamma函数首先我们可以看一下Gamma函数的定义:Γ(x)=∫∞0tx−1e−tdtΓ(x)=∫0∞tx−1e−tdt\Gamma(x)=\int_{0}^{\infty}t^{x-1}e^{-t}dtGamma的重要性质包括下面几条:1.递推公式:Γ(x+1)=xΓ(x)Γ(x+1)=xΓ(x)\Gamma(x+1)=x\Gamma(x)2.对于正整数n,有…

    2022年10月12日
  • 常用jenkins插件汇总

    常用jenkins插件汇总1、ActiveChoicesPlug-in提供更多的参数展示方式,以及不同参数之间的动态关联2、ExtendedChoiceParameterPlug-In扩展参数值、默认值、参数说明的应用方式,可以从文件中获取3、Multijobplugin将已经创建的任务串行或并行,可以定义执行顺序以及参数传递4、PublishOverSSH通过ssh的方式向远端机器发送命令5、SCMAPIPlugin通过轮询方式检测版本库是否有更改,更改则触发构建…

  • CAN总线协议

    CAN总线协议目录1.总体概述 1.1基本概念1.2通讯方式1.3为什么使用CAN?1.总体概述 1.1基本概念  CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。 1.2通讯方式  回顾前面学到的RS23.

  • Linux 重启oracle数据库[通俗易懂]

    Linux 重启oracle数据库[通俗易懂]Linux下重启oracle数据库步骤//1.使用oracle用户登录数据库 su–oracle//2.进入Sqlplus控制台 sqlplus/nolog//3.连接到系统管理员 connect/assysdba//4.关闭数据库 shutdownimmediate//5.启动数据库 startup//6.退出sqlplus控制台 exit//7.进入监听器控制台 lsnrctl//8.启动监听器 start//9.退出监听器控

发表回复

您的电子邮箱地址不会被公开。

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