首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIELab空间中的颜色输出

CIELab空间中的颜色输出
EN

Stack Overflow用户
提问于 2012-01-23 17:55:55
回答 2查看 4K关注 0票数 2

为了可视化某些数据,我应该使用着色。也就是说,我处理的C++代码是使用cairo-graphics输出的,并且函数基于RGB空间。另一方面,我处理的数据应该利用CIELab颜色空间的“特定切片”。

问题是:用C++做这件事最合适的方法是什么?也许一些转换仍然依赖于cairo提供的RGB函数(尽管我怀疑这种替代方法,因为RGB是依赖于设备的)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-23 22:08:52

OpenCV有一些内置的颜色转换。您可以使用它们,或者使用它们作为您自己的颜色转换例程的灵感。请参阅the doc about color conversion in OpenCV (cv::cvtColor)

使用它的一种可能方式是:

代码语言:javascript
复制
#include <cv.h>
#include <highgui.h>
int main()
{
    cv::Mat imgRgb = cv::imread("file.bmp");
    cv::Mat imgLab;
    cv::cvtColor(imgRgb, imgLab, Cv::CV_BGR2Lab);

    //access Lab values
    int y = 50;
    int x = 20;
    double L = imgLab.at<double>(y,x)[0]; //beware the order : openCV treats images as matrixes, thus the y param come first
    double a = imgLab.at<double>(y,x)[1];
    double b = imgLab.at<double>(y,x)[2];   
}

注意:我没有测试或编译这段代码,这只是一个草稿。

票数 4
EN

Stack Overflow用户

发布于 2013-01-31 14:35:47

我已经编译并测试了上面的内容。为了便于将来参考,这里有一个将RGB转换为CIELAB的函数

代码语言:javascript
复制
#include <cv.h>
#include <highgui.h>
Mat BGR2CIELab(Mat const &rgb_src)
{
    Mat imgLab;
    cvtColor(rgb_src, imgLab, CV_BGR2Lab);

    //access Lab values
    int y = 50;
    int x = 20;
    Vec3d pix_bgr = imgLab.ptr<Vec3d>(y)[x]; //beware the order : openCV treats images as matrixes, thus the y param come first
    double L = pix_bgr.val[0];
    double a = pix_bgr.val[1];
    double b = pix_bgr.val[2];

    return imgLab;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8969795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档