撤消仪表convert依行动

Undo consecutives convertTo operations

本文关键字:convert 仪表 撤消      更新时间:2023-10-16

将其应用于 cv::Mat

original.convertTo(new_image, -1, 1.2, -10);

如何实现相反的效果,以恢复原始矩阵?

我尝试将比例参数降低到1以下,并反转beta参数而不会获得所需的效果。我想我错过了它们的工作方式,但找不到答案。

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;

Note 可以将结果 saturated_cast<>'ed以适合矩阵类型。在这种情况下,该操作不是可逆的,并且会产生与原始图像不同的图像。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;
}