【问题标题】:Getting exception while calculating PSNR计算 PSNR 时出现异常
【发布时间】:2021-08-05 07:44:37
【问题描述】:

我有一个非常简单的代码来计算 PSNR,当我运行它时出现异常。

void psnr()
{
    try
    {
        Mat img = imread("TestImage.png");
        Mat imgGray, imgCanny;

        Canny(img, imgCanny, 15, 150);

        cout << endl << "PSNR " << cv::PSNR(img, imgCanny);
    }
    catch (cv::Exception& ex)
    {
        cout << "Error " << ex.msg;
    }

    waitKey(0);    
}

我得到了期待:

错误 OpenCV(4.5.2) C:\build\master_winpack-build-win64-vc15\opencv\modules\core\src\norm.cpp:1279: 错误:(-215:断言失败)_src1.type() == _src2.type() in 函数'cv::PSNR'

异常的原因可能是什么?

【问题讨论】:

    标签: opencv


    【解决方案1】:

    img 格式很可能是 3 通道 BGR 格式,imgCanny 很可能是单通道(灰度格式)。

    断言消息说:

    (-215:断言失败) _src1.type() == _src2.type()

    意思是_src1的类型和_src2的类型不一样。
    cv::PSNR 期望输入图像的类型相同时。

    要获取 Mat 类型,请阅读以下post


    一个简单的解决方案是将img 转换为灰度格式:

    cv::Mat grayImg;
    cv::cvtColor(img, grayImg, cv::COLOR_BGR2GRAY);
    cout << endl << "PSNR " << cv::PSNR(grayImg, imgCanny);
    

    【讨论】:

    • 明白了,代码按预期工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    相关资源
    最近更新 更多