0
点赞
收藏
分享

微信扫一扫

Lab ColorSpace and Channel in Opencv(java)

在觉 2022-08-22 阅读 26


最近在弄opencv,了解到了lab这种比较接近人眼视觉的这种色彩空间,对lab色彩空间的解释可以百度,这里就不多说了。这里想说2个问题

1、是Lab的取值范围,因为之前从百度看了找了很多文章,标题都是Opencv lab结果给的都是lab的标准解释,导致自己误以为在opencv里面Lab中比如L的取值范围依然是0-100,直到自己在进行信道分离时发现lab三个通道没有一个通道的数值是完全在0-100的………………蒙圈了…………

其实Opencv中L通道数值范围并不是标准的0-100,而是0-255(可能opencv感觉这样表示比较方便)但是从0-255我们依然可以很方便的转换到0-100。

后来查了官方文档,3.1里面有具体介绍:

​​https://docs.opencv.org/3.1.0/d6/d6d/tutorial_mat_the_basic_image_container.html​​

2、是想说Lab通道拆分的对应关系,关于Mat的通道分离,比较常见的就是大家对RGB图像的3个通道的分离。通过下图可以看出实际上opencv中的三个通道的排序实际是BGR的排序

Lab ColorSpace and Channel in Opencv(java)_百度


因此我们常见的BGR获取是这样的

for (int y = 0; y < srcmat.rows(); y++) {
for (int x = 0; x < srcmat.cols(); x++) {
int r = (int) srcmat.get(y, x)[2];
int g = (int) srcmat.get(y, x)[1];
int b = (int) srcmat.get(y, x)[0];
dst.put(y, x, b, g, r);
}
}

而Lab的顺序却是正常的排序:

for (int y = 0; y < srcmat.rows(); y++) {
for (int x = 0; x < srcmat.cols(); x++) {
int l = (int) srcmat.get(y, x)[0];
int a = (int) srcmat.get(y, x)[1];
int b = (int) srcmat.get(y, x)[2];
dst.put(y, x, l, a, b);
}
}


举报

相关推荐

0 条评论