OpenCV 函数 "Split" & "Merge" 的调试断言失败

Debug assertion failure of OpenCV function "Split"&"Merge"

本文关键字:调试 断言 失败 函数 Split OpenCV Merge      更新时间:2023-10-16

代码如下

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
bool MultiBlending();
int main()
{
    if (MultiBlending())
    cout << "Program Running Success." << endl;
    waitKey(0);
    return 0;
}
bool MultiBlending()
{
    vector<Mat> Channels;
    Mat srcImage1 = imread("dota_jugg.jpg");
    Mat dotaLogo = imread("dota_logo.jpg", 0);
    Mat imgROI,
    dstImage,
    srcImage2;
    //Process begins
    split(srcImage1, Channels);
    //Blue channel
    Mat blueChannel;
    blueChannel = Channels.at(0);
    //Define ROI
    imgROI = blueChannel(Rect(500, 250, dotaLogo.cols, dotaLogo.rows));
    //Blend
    addWeighted(imgROI, 1.0, dotaLogo, 0.5, 0, imgROI);
    //Merge
    merge(Channels, dstImage);
    //Display
    imshow("Blue Blending", dstImage);
    return true;
}

这只是一个简单的程序,它应该可以正常工作。但是我一直收到结果"调试断言失败"错误屏幕截图

应用"步过"方法后,我发现调用函数"MultiBlending"后发生了错误。更具体地说,在表达式"返回 true"之后。我尝试将函数中的所有内容放入主函数中。然后我收到了相同的结果,它发生在主函数中的表达式"return 0"之后。

所以我一直在想,也许与记忆释放有关。但我不知道在哪里以及如何?

对于合并,您需要:

merge(Channels,3, dstImage);

我不确定,但我认为您在声明频道时需要这个:

vector<Mat> Channels(3);