简介

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. ES6 new syntax of Default Function Parameters

    Default Function Parameters.md Default Function Parameters function getSum(a,b){ a = (a !== undefine ...

  2. Python系列之 - python数据类型

    原链接:https://blog.csdn.net/m0_37745438/article/details/79572884 学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个 ...

  3. js常用的字符串方法分析

    ##字符串## 字符串: 由0个或多个字符组成,被成对的英文单引号或双引号包含起来的. 字符编码: 每一个字符在计算机存储的编号. 计算机会保存有一套或几套用于标注编号与字符对应关系的字典.(字符集) ...

  4. [Luogu 3810]三维偏序

    Description 有 $ n $ 个元素,第 $ i $ 个元素有 $ a_i $ .$ b_i $ .$ c_i $ 三个属性,设 $ f(i) $ 表示满足 $ a_j \leq a_i $ ...

  5. 数轴line

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAq8AAAGaCAYAAAAhPqoeAAAgAElEQVR4nOzdCbh2U/k/8C0NpkgRzZ

  6. 【bzoj4443 scoi2015】小凸玩矩阵

    题目描述 小凸和小方是好朋友,小方给了小凸一个 nn × mm (n \leq m)(n≤m) 的矩阵 AA ,并且要求小凸从矩阵中选出 nn 个数,其中任意两个数都不能在同一行或者同一列.现在小凸想 ...

  7. bzoj 4033: [HAOI2015]树上染色

    Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色.将所有点染色后,你会获得黑点两两之间的距 ...

  8. [Noi2016]优秀的拆分

    来自F allDream的博客,未经允许,请勿转载,谢谢. 如果一个字符串可以被拆分为 AABB 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 aab ...

  9. Python 中的 if __name__ == '__main__' 该如何理解

    __name__ 表示当前模块名, __main__ 表示正在运行的模块名. if __name__ == '__main__' 这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导 ...

  10. URLDecoder: Illegal hex characters in escape (%) pattern - For input string

    原因:后台发布文章的时候,内容里面有%,导致后台URLDecoder.decode()转码的时候报错. 看了java.net.URLDecoder的decode()的源码,原来是转码错误. 贴出部分代 ...