gpt4 book ai didi

c++ - OpenCV C++ : Convert RGBA to HSL and then split channels

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:39 25 4
gpt4 key购买 nike

对于一些图像分割工作,我想在 HSL 颜色空间中使用图像的亮度 channel 。

为了实现这一点,我将 RGBA 图像转换为 RGB,然后再转换为 HSL。颜色转换后,我使用 cv::mixChannels 将图像分成颜色平面,这为饱和度/亮度平面提供了黑色输出。

代码:

cv::Mat src;
cv::Mat hsl;

cv::cvtColor(srcRgba , src , CV_RGBA2RGB);
cv::cvtColor(src, hsl, CV_RGB2HLS);

cv::Mat hue = cv::Mat::Mat(hsl.size(), hsl.depth());
cv::Mat saturation = cv::Mat::Mat(hsl.size(), hsl.depth());
cv::Mat lightness = cv::Mat::Mat(hsl.size(), hsl.depth());

cv::Mat matsOut[] = { hue, saturation, lightness };

// hsv[0] => hue[0], hsv[1] => saturation[0], hsv[2] => lightness[0]
int ch[] = { 0,0, 1,0, 2,0 };

// number of elements in hsl -> 1
// number of elements in matsOut -> 3
// number of pairs in ch -> 3
cv::mixChannels(&hsl, 1, matsOut, 3, ch, 3);

也许我把 cv::mixChannels 搞砸了?

编辑

这是我使用的 cv::split 代码和 Xcode 给我的错误:

代码:

cv::Mat src;
cv::Mat hsl;

cv::cvtColor(srcRgba , src , CV_RGBA2RGB);
cv::cvtColor(src, hsl, CV_RGB2HLS);

std::vector<cv::Mat> hslChannels;
cv::split(hsl, hslChannels);

错误:

Undefined symbols for architecture x86_64:
"cv::split(cv::Mat const&, std::__1::vector<cv::Mat, std::__1::allocator<cv::Mat> >&)", referenced from:
hsvTest(cv::Mat) in test.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

编辑 2

知道了,这有效:

cv::Mat src;
cv::Mat hsl;

cv::cvtColor(srcRgba , src , CV_RGBA2RGB);
cv::cvtColor(src, hsl, CV_RGB2HLS);

cv::Mat hslChannels[3];
cv::split(hsl, hslChannels);

现在色调平面完全是黑色的,但是饱和度和亮度平面看起来还不错......

最佳答案

错误是您向 cvSplit 传递了一个 CVMat vector 。试着看看这里: http://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=cvsplit

关于c++ - OpenCV C++ : Convert RGBA to HSL and then split channels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com