【问题标题】:Convert one pixel from color space to another [duplicate]将一个像素从色彩空间转换为另一个[重复]
【发布时间】:2016-03-03 07:28:13
【问题描述】:

如何将一个像素从一种颜色空间转换为另一种?我发现cv::cvtColor 不接受cv::Scalar 也不接受cv::Vec3f。或者换句话说,它接受它们但引发错误,因为它们最终将被处理为 1-Channel cv::Mat。有没有比像这样构造一个元素 cv::Mat 更好的(直接来自 cv::Scalar 或 cv::VecYX 的更干净的方式)?

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]);
}

【问题讨论】:

  • 在标记为骗子之前,请检查this 是否有帮助
  • 简答,不... (AFAIK) ;D
  • @miki 我发誓我搜索了百万次,但没有找到那个问题:D。谢谢:)

标签: c++ opencv


【解决方案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 发生变化

【讨论】:

  • 谢谢,但我的值是 cv::Vec3b 而不是 cv::Mat.. 它不是任何图像的一部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-06
  • 2020-05-04
相关资源
最近更新 更多