Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过直方图测量图像的颜色

通过直方图测量图像的颜色
EN

Stack Overflow用户
提问于 2017-03-08 19:31:38
回答 2查看 1.7K关注 0票数 4

我想做一种从白色到黄色的色度计。

我将尝试更好地解释,但由于我是Python和图像处理的新手,如果我说错了什么,请纠正我。

我使用HSV colorspace,因为我读到它可以更好地表示三个分量(色调,饱和度和值)的颜色特征。假设我有一个带有一些白色阴影的图像,程序应该能够根据像素的色调,饱和度和图像的值来计算一个值,就好像我提供了一个略微白色到黄色阴影的图像,它应该给出类似的值。

以下是image of sugar crystals的一个示例。当忽略紫色的背景时,糖有白色和黄色的阴影。

我的第一个尝试是计算一个几乎全白的图像的直方图并将其作为参考,然后计算另一个图像的直方图并比较它们是否相似。它越黄,它应该越不相似,请记住,单个图像可以同时具有白色和黄色像素,甚至可以在色调直方图中具有一系列不同的黄色阴影):

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import cv2
from matplotlib import pyplot as plt

image = cv2.imread("C:\...\im1.png")
image2 = cv2.imread("C:\...\im2.png")

hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsv_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2HSV)

hue_hist = cv2.calcHist([hsv_image], [0], None, [180], [0, 180])
sat_hist = cv2.calcHist([hsv_image], [1], None, [256], [0, 256])
val_hist = cv2.calcHist([hsv_image], [2], None, [256], [0, 256])

hue_hist2 = cv2.calcHist([hsv_image2], [0], None, [180], [0, 180])
sat_hist2 = cv2.calcHist([hsv_image2], [1], None, [256], [0, 256])
val_hist2 = cv2.calcHist([hsv_image2], [2], None, [256], [0, 256])

dh = cv2.compareHist(hue_hist, hue_hist2, cv2.cv.CV_COMP_CORREL)
ds = cv2.compareHist(sat_hist, sat_hist2, cv2.cv.CV_COMP_CORREL)
dv = cv2.compareHist(val_hist, val_hist2, cv2.cv.CV_COMP_CORREL)

在那之后,我会有这三个单独的值来表示直方图在色调,饱和度和值上的相似性,然后我可以尝试一些数学模型,以便为dh,ds,dv的每个组合获得一些y分数值。

问题是,如果你比较黄色像素图像的色调直方图,相关性比较将表明它们完全不同,即使它们可能被解释为相似,因为白色到黄色的色调略有变化。我需要一些东西,它不仅依赖于直方图上像素的频率,还依赖于色调值的接近程度。

我想的另一个解决方案是计算直方图的加权平均值,这样即使比较一张图像和一张像素峰值为30色调的图像和另一张像素峰值为25色调的图像(它们彼此之间不会完全分开),我也可以对相似的分布有一个更接近的值。我还没试过这个呢。

你知道是否有更好的方法来实现这一点,或者至少我是在正确的方式上做这样的应用程序吗?

EN

回答 2

Stack Overflow用户

发布于 2017-03-09 02:19:11

要获得图像的“黄色度”,首先要获取色调。然后将其划分为扇区,在180-300-60 (C-M-Y)处切割。60到180之间的任何值都是黄色和青色的线性组合;60到300之间的任何值都是黄色和洋红色的线性组合。160到300之间的任何值都将具有黄色值0。将线性组合转换为0-100%黄色。将该值称为y

要获得白色“白度”,请使用饱和度。S=0是100%白色,S=30是70%白色。将该值称为w

然后你可以做类似这样的事情

代码语言:javascript
运行
AI代码解释
复制
yellowness = y / (y + w)
whiteness = w / (y + w)
票数 2
EN

Stack Overflow用户

发布于 2017-03-09 09:25:02

我不会使用HSV空间,因为白色的色调是不确定的(因为噪声,你可以得到任何值)。

我会首先观察像素在RGB空间中的扩散。(但您没有提供任何示例图像。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42680312

复制
相关文章
Ruby检测Gem是否安装
最近参加七牛的demo大赛,决定使用ruby开发。于是遇到了一些疑问,然后解决了,这里记录一下。
技术小黑屋
2018/09/04
1.9K0
MAC安装Ruby Rails brew gem
Error running ‘requirements_osx_brew_libs_install autoconf automake libtool pkg-config libyaml readline libksba openssl’,
全栈程序员站长
2021/05/19
1.7K0
在执行gem: redis requires Ruby version >= 2.2.2
/usr/local/rvm  /usr/local/rvm/src/rvm  /usr/local/rvm/src/rvm/bin/rvm  /usr/local/rvm/src/rvm/lib/rvm  /usr/local/rvm/src/rvm/scripts/rvm  /usr/local/rvm/bin/rvm  /usr/local/rvm/lib/rvm  /usr/local/rvm/scripts/rvm
拓荒者
2019/03/11
1.4K0
【Ruby】【改gem源镜像】【Win10 + Jruby-9.1.2.0 + Rails 5.1.3 + gem 2.6.4 】
(1)> gem sources –add http://gems.ruby-china.org 遇到问题: Error fetching https://gems.ruby-china.org/: certificate verify failed (https://gems.ruby-china.org/specs.4.8.gz)
全栈程序员站长
2022/09/06
7800
warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem nati
不知道homebrew的不要问我,因为我也不知道是什么鬼。应该和忍者影分身一种鬼东西。
landv
2019/05/23
1.3K0
warning insecure world writable dir ruby mode 040777,gem insstal sass error failed to build gem nati
如何使用ReconAIzer将OpenAI添加到Burp中
ReconAIzer是一款功能强大的Burp Suite扩展,该工具基于Jython开发,可以为Burp Stuite添加OpenAI能力,并利用OpenAI来优化和增强渗透测试过程中的网络侦查任务。该工具专为漏洞猎人和渗透测试人员设计,支持以自动化的形式执行多种网络安全任务,可以帮助广大安全研究人员以简单快速的形式识别和利用漏洞。
FB客服
2023/08/08
3730
如何使用ReconAIzer将OpenAI添加到Burp中
将oracle驱动包加到maven中
2、确认maven环境变量已整确(cmd 中执行 mvn -v 显示maven的版本信息);
qubianzhong
2018/08/10
5090
将Python网络爬虫的数据追加到csv文件
前几天在Python白银交流群有个叫【邓旺】的粉丝问了一个将Python网络爬虫的数据追加到csv文件的问题,这里拿出来给大家分享下,一起学习下。
前端皮皮
2022/08/17
2K0
将Python网络爬虫的数据追加到csv文件
使用Python附加到JSON文件
JSON的完整形式是JavaScript Object Notation。这意味着将使用编程语言的文本组成的脚本(可执行)文件用于存储和传输数据。Python通过名为的内置包支持JSON json。要使用此功能,我们以Python脚本导入json包。JSON中的文本是通过带引号的字符串完成的,该字符串包含中的键-值映射中的值{ }。
用户7466307
2020/07/02
1.8K0
使用Python附加到JSON文件
Java将内容追加/添加到现有文件
如果您希望代码创建一个新文件并删除以前的现有文件,则FileWriter可以轻松代替它。要替换现有文件中的所有内容,请使用以下命令:
用户7886150
2021/04/28
3.1K0
如何手动将消息添加到Linux系统日志文件
日志文件是包含系统本身已记录的一组记录(或事件列表)的文件。使用日志文件,系统管理员可以跟踪在特定日期或特定时间发生的情况。管理员通常将日志文件用于故障排除。日志文件是自动生成的,并保存在公共目录-/ var / log /下。我们还可以将消息手动添加到Linux系统日志文件中。例如,设置日志服务器后,您可能要检查日志服务器是否正常运行。为此,我们可以在日志文件中手动添加一些条目以测试日志服务器。这是logger命令派上用场的地方。
用户6543014
2020/02/21
2.3K0
使用innodb_ruby 分析innodb物理文件
yum install zlib-devel curl-devel openssl-devel httpd-devel apr-devel apr-util-devel
保持热爱奔赴山海
2019/09/17
6750
使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序
Rails是一个用Ruby编写的开源Web应用程序框架。Nginx是一种高性能HTTP服务器,反向代理和负载均衡器,以其并发性,稳定性,可伸缩性和低内存消耗而著称。与Nginx一样,Puma是另一个极其快速且并发的Web服务器,内存占用非常小,但是为Ruby Web应用程序构建。
尘埃
2018/08/09
5.1K0
Windows 下 Gollum 安装与使用
GitHub :gollum 我们通过它的介绍,可以知道gollum 是基于Ruby开发的一个软件。
zinyan.com
2023/07/13
7200
Windows 下 Gollum 安装与使用
ARKit 简介-使用设备的相机将虚拟对象添加到现实世界中 看视频
到目前为止,你一定听说过关于增强现实的这个相当新的概念。这项技术并不新鲜,您已经在电影中看到它或在电子游戏中体验过它。我的意思是,如果不是免费的话,一般人群现在可以以最低成本轻松获得它。尽管ARKit仅在2017年于2017年发布,但它很快受到欢迎,其可能性无穷无尽。一些人声称这是“下一次大转变”或“改变游戏规则”。
iOSDevLog
2019/06/17
3.7K0
ARKit 简介-使用设备的相机将虚拟对象添加到现实世界中 看视频
Ruby常用文件操作
初学Ruby,很多需要学习,现在开始尝试使用Ruby来写一个脚本,其中用到了很多文件相关的操作,这里阶段地整理一些。便于后续的再次查找。
技术小黑屋
2018/09/04
5690
Winform 后台将指定的控件集合添加到制定容器中
1 /// <summary> 2 /// 把按钮按照行数分割排列 3 /// </summary> 4 /// <param name="ControlArry">按钮集合</param> 5 /// <param name="control_parent">父容器</param> 6 /// <param name="RowCount">每一行数量</param> 7 ///
FreeTimeWorker
2020/08/31
2.4K0
《Prometheus监控实战》第8章 监控应用程序
第8章 监控应用程序 首先,考虑的一些高级设计模式和原则 ---- 8.1 应用程序监控入门 应用程序开发中存在一种常见的反模式,即把监控和其他运维功能(如安全性)视为应用程序的增值组件而非核心功能。但监控(和安全性)应该是应用程序的核心功能。如果你要为应用程序构建规范或用户故事,则请把对应用程序每个组件的监控包含进去。不构建指标或监控将存在严重的业务和运营风险,这将导致 无法识别或诊断故障 无法衡量应用程序的运行性能 无法衡量应用程序或组件的业务指标以及成功与否,例如跟踪销售数据或交易价值 另一种常见的反
yeedomliu
2019/12/19
4.7K0
解决 can't find gem cocoapods (>= 0.a) (Gem::GemNotFoundException)
今天 pod install 报错了,记录一下解决方案 报错如下 : /Library/Ruby/Site/2.0.0/rubygems.rb:270:in `find_spec_for_exe': can't find gem cocoapods (>= 0.a) (Gem::GemNotFoundException) from /Library/Ruby/Site/2.0.0/rubygems.rb:298:in `activate_bin_path' from /usr/loca
LinXunFeng
2018/06/29
8.6K0
点击加载更多

相似问题

安装"google-api-client“时Ruby On Rails gem依赖冲突

11

如何在Ruby中添加到gem文件?

24

如何将gem依赖项添加到我的ruby gem中

15

将Python脚本添加到Ruby Gem

113

如何使用ruby api gem将图像添加到shopify集合中

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文