将此应用于cv::Mat
original.convertTo(new_image, -1, 1.2, -10);
如何实现相反的效果,以取回原始矩阵?
我尝试将scale参数降低到1以下,然后反转beta参数而不会产生预期的效果。 我想我错过了一些关于它们是如何工作的东西,但是找不到答案。
答案 0 :(得分:1)
convertTo
函数计算:
new_image = original * alpha + beta
new_image = original * 1.2 + (-10)
要进行逆操作,您需要:
old_image = (new_image - beta) / alpha;
old_image = (new_image - (-10)) / 1.2;
请注意,结果可能为saturated_cast<>
以符合矩阵类型。在这种情况下,操作不可逆,并产生与原始图像不同的图像。这很可能发生在CV_8U
矩阵上,但不适用于CV_64F
矩阵。
这是一个简单的片段,展示了它的工作原理:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat original = ...
double alpha = 1.2;
double beta = -10.0;
Mat new_image;
original.convertTo(new_image, -1, alpha, beta);
// // Revert the 'convertTo'
Mat old_image;
old_image = (new_image - beta) / alpha;
// Check the difference
Mat diff;
absdiff(original, old_image, diff);
return 0;
}