如何将一个像素从一个色彩空间转换为另一个色彩空间?我发现cv::cvtColor
不接受cv::Scalar
cv::Vec3f
。或者换句话说,它接受它们但引发错误,因为它们最终将被处理为1通道cv::Mat
。是否有更好的(更直接来自cv::Scalar
或cv::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]);
}
答案 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进行更改