簡體   English   中英

OpenCV C++:將 RGBA 轉換為 HSL,然后拆分通道

[英]OpenCV C++: Convert RGBA to HSL and then split channels

對於一些圖像分割工作,我想使用 HSL 顏色空間中圖像的亮度通道。

為此,我將 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);

現在色調平面完全是黑色的,但飽和度和亮度平面看起來還可以……

錯誤是您將 CVMat 的向量傳遞給 cvSplit。 嘗試看這里: http : //docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=cvsplit

如果您仍想使用向量來存儲矩陣,則需要預先分配它們(例如,vector< Mat > hslChannels(3) 將在 Mat 類型的向量中創建 3 個元素。)

所以你的代碼將是:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM