RGB 的差异 - OpenCV 和 ImageJ 中的 > L*a*b 变换



我需要转换我的图像(RGB存储在。jpg中)以突出显示它的特定区域。使用ImageJ,我发现在LAB色彩空间中提取图像的l通道正是我需要进一步检查的。当在c++/OpenCV中实现时,结果与ImageJ完全不同(见图片ImageJ L-channel和OpenCV 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相同的结果。

谢谢!

可能是:

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

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

相关内容

  • 没有找到相关文章

最新更新