将一个像素从颜色空间转换为另一个像素

时间:2016-03-03 07:28:13

标签: c++ opencv

如何将一个像素从一个色彩空间转换为另一个色彩空间?我发现cv::cvtColor不接受cv::Scalar cv::Vec3f。或者换句话说,它接受它们但引发错误,因为它们最终将被处理为1通道cv::Mat。是否有更好的(更直接来自cv::Scalarcv::VecYX)方式而不是像这样构建一个元素cv::Mat

cv::Vec3b covert_1_pixel_to_lab(cv::Vec3b const& src){
    cv::Vec3b src(b,g,r);
    cv::Mat src_mat(1, 1, CV_8UC3);
    src_mat.ptr<uchar>(0)[0] = src(0);
    src_mat.ptr<uchar>(0)[1] = src(1);
    src_mat.ptr<uchar>(0)[2] = src(2);
    cv::Mat dst_mat;
    cv::cvtColor(src_mat, dst_mat, cv::COLOR_BGR2Lab);
    return cv::Vec3b(dst_mat.ptr<uchar>(0)[0],
        dst_mat.ptr<uchar>(0)[1],
        dst_mat.ptr<uchar>(0)[2]);
}

1 个答案:

答案 0 :(得分:1)

您可以通过Rects使用ROI:

Rect r=Rect(x,y,1,1);
Mat img2=img(r);
cvtColor(img2,img2,CV_BGR2Luv);//or any other color space

这可能会对img进行更改