我需要帮助弄清楚OpenCV是如何设置一个等于某物的矩阵的。
我有一个名为“亮度”的8位Mat,我想要色调图。下面是为我完成这一任务的工作代码,K是常量450。
cv::cvtColor(radiance, radiance, CV_BGR2XYZ);
radiance = (K * radiance)/(1 + (K * radiance));
cv::cvtColor(radiance, radiance, CV_XYZ2BGR);`这个看起来不应该工作,但它确实工作。它将创建一个完整的色调映射图像,看上去很棒。但是,如果尝试对单个像素执行此方法,则它们会变成介于0到1之间的小数,从而截断为0。这里有一个例子-
cv::cvtColor(radiance, radiance, CV_BGR2XYZ);
int x = radiance.at<cv::Vec3b>(500, 500)[0];
x = (K * x)/(1 + (K * x));
std::cout << x << "\n";它的输出正是我所期望的。
0我理解为什么第二个代码片段打印出一个零,但是第一部分中发生了什么,它可以正确地对图像进行色调映射,以及我如何在单个像素级别上重新创建这个值呢?
发布于 2018-01-19 07:36:56
你就不能把亮度定义为浮子矩阵吗?
Mat radiance(m, n, DataType<float>::type);这样你就可以得到一个浮子
cv::cvtColor(radiance, radiance, CV_BGR2XYZ);
float x = radiance.at<cv::Vec3b>(500, 500)[0];
x = (K*x)/(1 + (K*x));
std::cout << x << "\n";https://stackoverflow.com/questions/48335442
复制相似问题