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 等等。欢迎反馈给我。

结束语

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

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

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

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


相关推荐

  • HandlerThread原理分析、实战、最佳实践!

    HandlerThread原理分析、实战、最佳实践!本文我们将学习HandlerThread的实现原理,以及开发时,如何正确的使用它来实现我们的开发任务。HandlerThread源码分析设想这样一个场景:我们要在一个线程A中处理业务逻辑,在另一个线程B中,监听A的执行,并进行结果处理。这时我们使用HandlerThread就可以非常简单的实现该功能了。通常我们的线程交互场景,都是UI线程中启动子线程,并且由子线程完成工作任务,最终结果交给UI线程。现在我们的使用场景是,在子线程中监控其他线程的执行结果(这里的其他线程可以是另一个子线程,也可以是UI

    2022年10月27日
    0
  • 少年群侠传服务器维护时间,少年群侠传————【维护】7月6日更新维护公告…

    少年群侠传服务器维护时间,少年群侠传————【维护】7月6日更新维护公告…亲爱的玩家:大家好!为了更新游戏内容,提升游戏体验,7k7k《少年群侠传》将于7月6日7:00-10:00对所有服务器进行更新维护,维护期间无法登陆游戏,维护时间预计3小时。如果在维护期间无法完成维护相关事宜,开机时间将继续顺延,如果提前解决问题,也将提前开放服务器。请各位玩家相互转告,并留意游戏开放时间。对于停机期间给您带来的不便,敬请见谅。7k7k《少年群侠传》运营团队感谢所有玩家的支持和配合…

    2022年5月12日
    32
  • 万字文肝Python基础知识

    万字文肝Python基础知识Python基础知识,进阶操作

    2022年6月24日
    21
  • 用python生成随机数的几种方法「建议收藏」

    用python生成随机数的几种方法「建议收藏」今天学习了用python生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下。本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。1从给定参数的正态分布中生成随机数当考虑从正态分布中生成随机数时,应当首先知道正态分布的均值和方差(标准差),有了这些,…

    2022年10月5日
    0
  • ssh 命令连接

    ssh 命令连接Linuxssh命令详解SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP22端口),包括公共秘钥等交换等信息。ssh服务端由2部分组成:openssh(提供ssh服务)openssl(提供加密的程序)ssh的客户端可以用XSHELL,Securecrt,Moba…

    2022年6月24日
    27
  • Java回顾之序列化

    Java回顾之序列化

    2021年8月23日
    50

发表回复

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

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