gpt4 book ai didi

c++ - OpenCV:如何计算 max(R,G,B)

转载 作者:太空狗 更新时间:2023-10-29 19:58:12 26 4
gpt4 key购买 nike

遗憾的是,OpenCV 文档只为数学家或已经知道如何使用 OpenCV 的人编写。

我想做这么简单的事情,比如为每个像素获取 R、G、B 的最大值并将其写入新的灰度图像。我尝试了 merge()split() 和其他方法但没有成功。

下面的函数完全符合我的要求,但我想知道 OpenCV 是否可以做得更简单。

Mat CalcRGBmax(Mat i_RGB)
{
if (i_RGB.channels() != 3)
throw "24 bit color image expected.";

Mat i_Gray(i_RGB.rows, i_RGB.cols, CV_8UC1);

for (int Y=0; Y<i_RGB.rows; Y++)
{
BYTE* pu8_Src = i_RGB. ptr<BYTE>(Y);
BYTE* pu8_Dst = i_Gray.ptr<BYTE>(Y);

int P = 0;
for (int X=0; X<i_RGB.cols; X++)
{
BYTE B = pu8_Src[P++];
BYTE G = pu8_Src[P++];
BYTE R = pu8_Src[P++];

pu8_Dst[X] = max(R, max(G,B));
}
}
return i_Gray;
}

最佳答案

您的代码会比这快得多,但这是使用 split() 的方法和 max() :

Mat CalcRGBmax(Mat i_RGB)
{
std::vector<cv::Mat> planes(3);
cv::split(i_RGB, planes);
return cv::Mat(cv::max(planes[2], cv::max(planes[1], planes[0])));
}

关于c++ - OpenCV:如何计算 max(R,G,B),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24686915/

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