【问题标题】:Assertion failed while using imwrite OpenCV使用 imwrite OpenCV 时断言失败
【发布时间】:2020-05-17 18:34:34
【问题描述】:

运行此代码时

int main(int argc, char *argv[])
{
    vector<cv::Mat> imgs(argc - 1);
    for (auto i = 1; i < argc; ++i)
    {
        cv::Mat img = cv::imread(argv[i]);
        cv::Mat dst;
        cv::GaussianBlur(img, dst, cv::Size(3, 3), 0, 0, cv::BORDER_DEFAULT);
        cv::Sobel(dst, dst, -1, 1, 1);
        imgs.push_back(dst);
    }

    for (auto i = 1; i < argc; ++i)
    {
        string filename(argv[i]);
        filename[0] = toupper(filename[0]);
        filename.end()[-5] = 'a';
        cv::imwrite(filename, imgs[i]);
    }
}

我收到以下错误消息:

libc++abi.dylib:以未捕获的类型异常终止 cv::Exception: OpenCV(4.3.0) /tmp/opencv-20200408-​​5080-l00ytm/opencv-4.3.0/modules/imgcodecs/src/loadsave.cpp:738: 错误:(-215:Assertion failed) !_img.empty() in function 'imwrite'

我不知道我做错了什么。

【问题讨论】:

    标签: c++ opencv c++17


    【解决方案1】:
    vector<cv::Mat> imgs(argc - 1);
    

    应该是

    vector<cv::Mat> imgs;
    

    您没有创建所需大小的向量,然后使用push_back

    要么创建大小为零的向量并使用push_back 向其中添加项目,要么创建所需大小的向量并使用下标为其分配项目。

    正如 Gerardo Zinno 所说,您在最终的 for 循环中有一个错误。

    cv::imwrite(filename, imgs[i]);
    

    应该是

    cv::imwrite(filename, imgs[i-1]); 
    

    【讨论】:

    • 最后一个函数的索引也有问题。数组 imgs 应该从 0 开始访问,而不是 1。
    • 是的,我同意,cv::imwrite(filename, imgs[i]); 应该是 cv::imwrite(filename, imgs[i-1]);
    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2021-09-28
    • 2019-02-11
    • 1970-01-01
    • 2017-10-26
    • 2012-11-26
    • 2014-11-24
    • 2014-05-28
    相关资源
    最近更新 更多