RGB的差异 - >在OpenCV和ImageJ中进行L * a * b转换

时间:2016-10-29 11:18:09

标签: opencv imagej lab-color-space

我需要转换我的图像(以.jpg存储的RGB)以突出显示它的特定区域。使用ImageJ我发现在LAB色彩空间中提取图像的L通道正是我进一步检查所需要的。 在C ++ / OpenCV中实现时,结果与ImageJ完全不同(请参阅图片ImageJ L-channelOpenCV L-channel):

#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"        
#include "opencv2/highgui/highgui.hpp"  
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;
using namespace std;

int main(){

     vector <Mat> lab_planes;
     Mat src, lab;

     src = imread("Pic.jpg", CV_LOAD_IMAGE_COLOR);
     cvtColot(src, lab, CV_BGR2Lab);
     split(lab, lab_planes);

     imshow("L", lab_planes[0]);
     imshow("a", lab_planes[1]);
     imshow("b", lab_planes[2]);

     waitKey(0);
     return 0;
 }

我试图谷歌那个,并发现可能存在渠道存储范围(0 - 255而不是&#39;正确&#39; 0 - 100)或RGB演示的差异,但我不知道#39;弄清楚如何获得与ImageJ相同的结果。

谢谢!

1 个答案:

答案 0 :(得分:1)

可能是:

cv::normalize(L,L,0,255,cv::NORM_MINMAX); 

或者(可能更正确)只需乘以2.55(首先转换为CV_32F然后相乘,然后转换回来)。