opencv3错误集锦(四)——Rect函数参数引发的异常中断

1.问题现象

编译程序时报错:0x00007FF91EEA7788 处(位于 opencvstudy_codetest.exe 中)有未经处理的异常: Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000000E8A56EE30 处。如下图:
opencv3错误集锦(四)——Rect函数参数引发的异常中断_第1张图片

opencv3错误集锦(四)——Rect函数参数引发的异常中断_第2张图片

这里写图片描述

2.问题分析

源代码如下

#include 
#include 
using namespace cv;

int main() {
    Mat girl = imread("1.jpg");
    namedWindow("【1】动漫图");
    imshow("【1】动漫图", girl);

    Mat image = imread("2.jpg");
    Mat logo = imread("5.jpg");

    namedWindow("【2】原画图");
    imshow("【2】原画图", image);

    namedWindow("【3】logo图");
    imshow("【3】logo图", logo);

    Mat imageROI;
    imageROI = image(Rect(800, 350, logo.cols, logo.rows));

    addWeighted(imageROI, 0.5, logo, 0.3, 0, imageROI);

    namedWindow("【4】原图+logo图");
    imshow("【4】原图+logo图",image);

    imwrite("由imwrite生成的图片.jpg", image);

    waitKey();
    return 0;

}

根据调试信息,可以判断错误出现在下面这两句代码

imageROI = image(Rect(800, 350, logo.cols, logo.rows));

addWeighted(imageROI, 0.5, logo, 0.3, 0, imageROI);

经过两天的反复纠结,终于顿悟出问题所在。
image和logo是两个mat对象,存储的是两张图片,
logo里面是
opencv3错误集锦(四)——Rect函数参数引发的异常中断_第3张图片
大小:1600x900

image里面是
opencv3错误集锦(四)——Rect函数参数引发的异常中断_第4张图片
大小也是1600x900

而这里选取感兴趣区域的方式是使用表示矩形区域的Rect,它指定矩形的左上角坐标(构造函数的前两个参数)和矩形的长宽(构造函数的后两个参数),以此定义一个矩形。但是我选取了两张一样大小的图片,导致选取的ROI超出了原图image的范围,最终导致异常中断。

3.解决方案

调整ROI,将logo图片剪小一点。

你可能感兴趣的:(机器视觉,opencv,异常,函数)