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: 允许多行输入 ...
随机推荐
- Python模块 - configparser
configparser模块用来对配置文件进行操作 1.获取所有块 import configparser config = configparser.ConfigParser() config.re ...
- 做了两年多salesforce平台开发,转Java的经历
2015年毕业,转眼已经三年多了.三年对于现在的我,真的很快,一开始对软件开发的执着一直没有变.我是一个很普通很普通长沙的一个专科毕业.刚进大学,对于软件开发真的是小白,仅仅只是存在对于游戏,和桌面软 ...
- pwd
显示当前在文件系统里的确切位置 注: 系统根目录是/ 用户主目录是/home/用户名 对于root用户,用户主目录为/root
- 無名(noname)
[问题描述] 因为是蒯的题所以没想好名字,为什么要用繁体呢?去看<唐诗三百首>吧! 题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B. 需要注意的是,串中所有的字母都 ...
- ●BZOJ 4176 Lucas的数论
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4176 题解: 莫比乌斯反演,杜教筛 首先有这么一个结论: 令d(n)表示n的约数的个数(就是 ...
- 【BZOJ1500】【Noi2005】维修数列
题意原题很清楚了. 解题思路:裸的平衡树操作,注意动态开点即可. 细节还是比较多的,具体参见代码吧... #include <stdio.h> #include <algorithm ...
- CCA更新流程分析
1 CCA CCA(空间信道评估)在CSMA/CA中比较非常重要,事关整机吞吐量,所以对其实现进行简单分析.CCA好像应该有2种:CCA-CS,是属于PLCP层的,捕获到能量且能量值高于-82dB后, ...
- 使用JAXB解析xml文件(二)
前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解 1.@XmlRootElement 用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccess ...
- Elasticsearch 创建、更新、删除文档、处理冲突
----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...
- 使用json-Server与postman快速模拟服务环境搭建
在前后端分离的这种工作模式下,分工明确,各司其职.前端负责展示数据,后端提供数据.然而,在这种过程中对于接口的规范 需要提前制定好.例如根据规范提前模拟数据,这个时候就比较麻烦的.JsonServer ...