【问题标题】:Difference in RGB -> L*a*b transformation in OpenCV and ImageJOpenCV 和 ImageJ 中 RGB 的差异 -> L*a*b 转换
【发布时间】:2016-10-29 11:18:09
【问题描述】:

我需要转换我的图像(RGB 存储在 .jpg 中)以突出显示它的特定区域。使用 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 而不是“正确”0 - 100)或 RGB 表示可能存在差异,但我不知道如何获得与 ImageJ 相同的结果。

谢谢!

【问题讨论】:

    标签: opencv imagej lab-color-space


    【解决方案1】:

    可能是:

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

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

    【讨论】:

    • 简单!谢谢,安德烈。 “扩展”范围到 0-255 给出了结果。
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 2013-06-02
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 2012-04-04
    相关资源
    最近更新 更多