简介

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颜色空间各通道的取值范围的更多相关文章

  1. Lab颜色空间

    原文:http://blog.csdn.net/carson2005/article/details/7200440 同RGB颜色空间相比,Lab是一种不常用的色彩空间.它是在1931年国际照明委员会 ...

  2. 【js jQuery】map集合 循环迭代取值---以及 map、json对象、list、array循环迭代的方法和区别

    后台给前台传来一个map @ResponseBody @RequestMapping(value = "getSys") public Map<Long,String> ...

  3. web(六)css的基本语法、取值与单位

    css语法包含如下部分: 选择器:用于选择需要添加样式的元素. 属性(property):样式的属性名称,例如color代表颜色. 取值与单位:属性对应的值以及单位. 语法规则:css的某些固定语法. ...

  4. 如何解决流程开发中SheetRadioButtonList页面取值问题

    分享一个常见的取值问题. 应用场景: SheetRadioButtonList控件,点击其中一项执行事件操作.如果是页面加载的情况下,值就无法取到. 具体原因如下: 我给SheetRadioButto ...

  5. jQuery radio的取值与赋值

    取值: $("input[name='radioName']:checked").val(); 赋值: $("input[name='radioName'][value= ...

  6. python通过函数改变变量取值

    严格讲应该是"通过函数调用,改变引用对象".python中,要区分"变量名"和"对象" 如果是类的对象,是引用类型的,那么可以通过函数调用, ...

  7. jsf初学selectOneMenu 绑定与取值

    jsf 的selectOneMenu 最后生成的<select>标签.这里涉及到一个binding 起初一直不知道是干嘛的,后来参考了其他文章.就相当于在asp.net 中如:<as ...

  8. CYQ.Data 快速开发之UI(赋值、取值、绑定)原理

    昨夜园子猴子问了几个我CYQ.Data使用的小问题,经过简单解答后,他表示“妈妈再也不用担心我的学习",并于事后以资鼓励,希望这框架越走越好. 除了技术上的交流,双方在生活,S上面的问题上也 ...

  9. EditText的inputType常用取值

    最近经过实际试验,总结了InputType几个常用取值表示的含义: 1.none, text, textVisiblePassword: 无任何输入限制 2.textMultiLine: 允许多行输入 ...

随机推荐

  1. Python模块 - configparser

    configparser模块用来对配置文件进行操作 1.获取所有块 import configparser config = configparser.ConfigParser() config.re ...

  2. 做了两年多salesforce平台开发,转Java的经历

    2015年毕业,转眼已经三年多了.三年对于现在的我,真的很快,一开始对软件开发的执着一直没有变.我是一个很普通很普通长沙的一个专科毕业.刚进大学,对于软件开发真的是小白,仅仅只是存在对于游戏,和桌面软 ...

  3. pwd

    显示当前在文件系统里的确切位置 注: 系统根目录是/ 用户主目录是/home/用户名 对于root用户,用户主目录为/root

  4. 無名(noname)

    [问题描述] 因为是蒯的题所以没想好名字,为什么要用繁体呢?去看<唐诗三百首>吧! 题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B. 需要注意的是,串中所有的字母都 ...

  5. ●BZOJ 4176 Lucas的数论

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4176 题解: 莫比乌斯反演,杜教筛 首先有这么一个结论: 令d(n)表示n的约数的个数(就是 ...

  6. 【BZOJ1500】【Noi2005】维修数列

    题意原题很清楚了. 解题思路:裸的平衡树操作,注意动态开点即可. 细节还是比较多的,具体参见代码吧... #include <stdio.h> #include <algorithm ...

  7. CCA更新流程分析

    1 CCA CCA(空间信道评估)在CSMA/CA中比较非常重要,事关整机吞吐量,所以对其实现进行简单分析.CCA好像应该有2种:CCA-CS,是属于PLCP层的,捕获到能量且能量值高于-82dB后, ...

  8. 使用JAXB解析xml文件(二)

    前面一章简单演示了JAXB的用法,这个章节主要梳理一下JAXB常见的几个注解 1.@XmlRootElement 用于类级别的注解,对应xml的跟元素,常与 @XmlType 和 @XmlAccess ...

  9. Elasticsearch 创建、更新、删除文档、处理冲突

    ----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...

  10. 使用json-Server与postman快速模拟服务环境搭建

    在前后端分离的这种工作模式下,分工明确,各司其职.前端负责展示数据,后端提供数据.然而,在这种过程中对于接口的规范 需要提前制定好.例如根据规范提前模拟数据,这个时候就比较麻烦的.JsonServer ...