LAB颜色空间各通道的取值范围
简介
LAB颜色空间在计算机视觉中经常被使用,知道L,A,B三个通道的取值范围有一定的意义。
OpenCV获取LAB取值范围
下面是一段实验代码,用于获取LAB的取值范围。
基本思路是,排列组合所有RGB可能,然后转变成LAB,在所得LAB中求取最大最小值。
#include <iostream>
#include <vector>
using namespace std;
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv){
Mat img(256, 256, CV_32FC3);
vector<float> pv(256);
// pixel color is in [0.f, 1.f];
for (int t = 0; t < 256; t++){
pv[t] = t / 255.f;
}
Mat img_lab;
vector<Mat> mv;
float min_l = FLT_MAX, max_l = FLT_MIN;
float min_a = FLT_MAX, max_a = FLT_MIN;
float min_b = FLT_MAX, max_b = FLT_MIN;
for (int c1 = 0; c1 < 256; c1++){
for (int c2 = 0; c2 < 256; c2++){
for (int c3 = 0; c3 < 256; c3++){
img.at<Vec3f>(c2, c3) = Vec3f(pv[c1], pv[c2], pv[c3]);
}
}
cvtColor(img, img_lab, CV_BGR2Lab);
cv::split(img_lab, mv);
double min_val, max_val;
cv::Point min_loc, max_loc;
cv::minMaxLoc(mv[0], &min_val, &max_val, &min_loc, &max_loc); // L
if (min_l > min_val) min_l = min_val;
if (max_l < max_val) max_l = max_val;
cv::minMaxLoc(mv[1], &min_val, &max_val, &min_loc, &max_loc); // A
if (min_a > min_val) min_a = min_val;
if (max_a < max_val) max_a = max_val;
cv::minMaxLoc(mv[2], &min_val, &max_val, &min_loc, &max_loc); // B
if (min_b > min_val) min_b = min_val;
if (max_b < max_val) max_b = max_val;
imshow("test", img);
waitKey(10);
cout << "step : " << c1 << endl;
}
cout << "L [" << min_l << ", " << max_l << "]" << endl;
cout << "A [" << min_a << ", " << max_a << "]" << endl;
cout << "B [" << min_b << ", " << max_b << "]" << endl;
return 0;
}
LAB颜色空间各通道的取值范围的更多相关文章
- Lab颜色空间
原文:http://blog.csdn.net/carson2005/article/details/7200440 同RGB颜色空间相比,Lab是一种不常用的色彩空间.它是在1931年国际照明委员会 ...
- 【js jQuery】map集合 循环迭代取值---以及 map、json对象、list、array循环迭代的方法和区别
后台给前台传来一个map @ResponseBody @RequestMapping(value = "getSys") public Map<Long,String> ...
- web(六)css的基本语法、取值与单位
css语法包含如下部分: 选择器:用于选择需要添加样式的元素. 属性(property):样式的属性名称,例如color代表颜色. 取值与单位:属性对应的值以及单位. 语法规则:css的某些固定语法. ...
- 如何解决流程开发中SheetRadioButtonList页面取值问题
分享一个常见的取值问题. 应用场景: SheetRadioButtonList控件,点击其中一项执行事件操作.如果是页面加载的情况下,值就无法取到. 具体原因如下: 我给SheetRadioButto ...
- jQuery radio的取值与赋值
取值: $("input[name='radioName']:checked").val(); 赋值: $("input[name='radioName'][value= ...
- python通过函数改变变量取值
严格讲应该是"通过函数调用,改变引用对象".python中,要区分"变量名"和"对象" 如果是类的对象,是引用类型的,那么可以通过函数调用, ...
- jsf初学selectOneMenu 绑定与取值
jsf 的selectOneMenu 最后生成的<select>标签.这里涉及到一个binding 起初一直不知道是干嘛的,后来参考了其他文章.就相当于在asp.net 中如:<as ...
- CYQ.Data 快速开发之UI(赋值、取值、绑定)原理
昨夜园子猴子问了几个我CYQ.Data使用的小问题,经过简单解答后,他表示“妈妈再也不用担心我的学习",并于事后以资鼓励,希望这框架越走越好. 除了技术上的交流,双方在生活,S上面的问题上也 ...
- EditText的inputType常用取值
最近经过实际试验,总结了InputType几个常用取值表示的含义: 1.none, text, textVisiblePassword: 无任何输入限制 2.textMultiLine: 允许多行输入 ...
随机推荐
- SpringContextUtil 的配置和调用
首先:在springmvc里面配置 <bean id="springContextUtil" class="com.hna.hka.rmc.common.util. ...
- JavaScript数据结构与算法(三) 优先级队列的实现
TypeScript方式实现源码 // Queue类和PriorityQueue类实现上的区别是,要向PriorityQueue添加元素,需要创建一个特殊的元素.这个元素包含了要添加到队列的元素(它可 ...
- 典型分布式系统分析:MapReduce
在 <分布式学习最佳实践:从分布式系统的特征开始(附思维导图)>一文中,提到学习分布式系统的一个好方法是思考分布式系统要解决的问题,有哪些衡量标准,为了解决这些问题:提出了哪些理论.协议. ...
- 一个web程序员的年终总结
2017年年终总结(就是一个程序员的瞎叨叨): 从来到中科院到现在,很开心可以在这留下来.毕竟对于我来说,这里符合我对自己毕业后前两年的规划.我是一个很慢的人,特别是对于我想做好的事情,我会非常认真仔 ...
- ●Joyoi Easy
题链: http://www.joyoi.cn/problem/tyvj-1952题解: 概率dp (先做的BZOJ 4318: OSU![本人题解],然后就感觉这个题很简单了) 令p[i]表示第i个 ...
- Codeforces Round #419 D. Karen and Test
Karen has just arrived at school, and she has a math test today! The test is about basic addition an ...
- [HNOI2006]超级英雄
题目描述 现在电视台有一种节目叫做超级英雄,大概的流程就是每位选手到台上回答主持人的几个问题,然后根据回答问题的多少获得不同数目的奖品或奖金.主持人问题准备了若干道题目,只有当选手正确回答一道题后,才 ...
- 求n个数的最小公倍数
解决的问题: 对于一个长度为n序列ai,求ai的最小公倍数 解析: 我们知道,如果求两个数a,b的LCM=a*b/gcd(a,b),多个数我们可以两两求LCM,再合并,这样会爆long long 所以 ...
- django-rest-framework 注意事项
注意事项: 在使用django rest framework时候由于网上资料太多,出现了 由一下两个函数导致的问题: from django.views.decorators.csrf import ...
- Log4j使用详解
1 Log4j配置说明 1.1 配置文件Log4j可以通过java程序动态设置,该方式明显缺点是:如果需要修改日志输出级别等信息,则必须修改java文件,然后重新编译,很是麻烦: log4j也可以通过 ...