opencv色彩空间转换bgr2hsv自己实现

色彩空间转换。

cv::Vec3b bgr2hsv(const cv::Vec3f& bgr, int hrange = 255, bool full = true) {
	float b = bgr[0];
	float g = bgr[1];
	float r = bgr[2];
	float maxVal = std::max({ r, g, b });
	float minVal = std::min({ r, g, b });

	float hue = 0.0f;

	if (maxVal != minVal) {
		if (maxVal == b)
			hue = 60 * (r - g) / (maxVal - minVal) + 240.0f;
		else if (maxVal == g)
			hue = 60 * (b - r) / (maxVal - minVal) + 120.0f;
		else if (maxVal == r)
			hue = 60 * (g - b) / (maxVal - minVal);

		if (hue < 0.0f)
			hue += 360.0f;
	}

	float saturation = maxVal == 0.0f ? 0.0f : (maxVal - minVal) / maxVal;
	float value = maxVal;

	if (full)
		hue = hue * hrange / 360.0f;
	else
		hue /= 2.0f;

	hue *= hrange / 360.0f;
	saturation *= hrange;
	value *= hrange;

	hue = saturate_cast<uchar>(hue);
	saturation = saturate_cast<uchar>(saturation);
	value = saturate_cast<uchar>(value);
	return cv::Vec3b(hue, saturation, value);
}

···

···

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值