OpenCV 函数 "Split" & "Merge" 的调试断言失败
Debug assertion failure of OpenCV function "Split"&"Merge"
代码如下
#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);
相关文章:
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 使用扫描的调试断言失败
- 图片不显示,关闭时出错 --> 调试断言失败!表达式:is_block_type_valid(标头>_block_use)
- C++ 调试断言失败 - 矢量下标超出视觉工作室的范围
- 调试断言失败的缓冲区!=nullptr
- 获取有关调试断言失败的错误:表达式:"(_Ptr_user &(_BIG_ALLOCATION_ALIGNMENT -1)) == 0" &&0
- 在Win10上使用带有Qt5的OpenCV3.0,调试断言失败
- C++,弹出调试断言失败窗口,我得到矢量迭代器不兼容的错误运行时
- C++ 调试断言失败,无效的空指针
- 如何在 Linux 上强制执行矢量下标超出范围的调试断言
- 调试断言仅在某些情况下失败?C++
- 调试断言失败
- 映射/集迭代器不可取消引用 (C++) - 调试断言失败
- std::vector<std::vector<int>>:调试断言失败。C++矢量下标超出范围保留内存
- 使用 Microsoft VS 编写程序C++,但我在这里收到调试断言消息.它可以在 cpp.sh 上运行,repl.i
- 字符串抛出矢量下标调试断言
- 使用调试断言时避免 ODR 冲突
- MFC DDX_RADIO会导致调用dodataexchange(dlgdata.cpp行286)时导致调试断言失败
- 无法在谷歌测试中捕获调试断言(死亡测试不满足它)
- 调试断言失败的矢量下标超出C 范围