博客
关于我
OpenCV中遇到Microsoft C++ 异常 cv::Exception
阅读量:791 次
发布时间:2023-02-23

本文共 767 字,大约阅读时间需要 2 分钟。

在我的《OpenCV2计算机视觉编程手册》第二章第二节的椒盐噪声例子中,程序出现了一些错误,我需要仔细检查并修复这些问题。

首先,原始程序中使用了OpenCV的core、highgui和opencv.hpp库。在主函数中,我读取了“Baboon.jpg”图片并调用了salt函数,传入2000次。随后创建了一个窗口并显示图片。

在salt函数中,我使用了rand()函数来随机生成i和j的位置,并修改像素值为255。但程序出现了内存错误,异常发生在0x7534c6e3处,提示可能是指针问题。

我怀疑是rand()函数没有正确初始化,导致随机数生成不稳定。比如,如果没有调用srand()函数,rand()可能会返回相同的值或负数,导致i和j超出图片范围,修改错误的像素地址。

进一步检查发现,salt函数中的坐标使用方式可能与OpenCV的坐标系统不一致。OpenCV中,像素坐标通常是行和列,对应的是y和x,但代码中用的是i和j,可能导致坐标错误。

修改后的代码中,我已经初始化了rand(),使用了srand(time(nullptr)),这应该能避免随机数问题。但代码中还存在多个问题,比如在多次访问像素值时,多次调用at

,可能导致多次修改同一个像素位置,或者在多线程环境下导致竞态问题。

此外,代码中存在结构性错误,多次使用了at

而未正确关闭指针,可能导致内存泄漏或异常。

修复步骤如下:

  • 确保使用srand()初始化rand(),避免随机数问题。
  • 检查像素坐标的正确性,确保i和j的顺序与OpenCV一致。
  • 确保在修改像素值时,正确处理单通道和多通道图像,避免多次修改同一个位置。
  • 检查代码结构,确保所有OpenCV函数正确调用,避免内存泄漏或未关闭的指针。
  • 通过逐步检查和修正这些问题,我应该能够解决程序的异常问题。

    转载地址:http://mrsfk.baihongyu.com/

    你可能感兴趣的文章
    onnx导出动态输入
    查看>>
    onnx导出动态输入
    查看>>
    onScrollStateChanged无效
    查看>>
    onTouchEvent构造器
    查看>>
    on_member_join 和删除不起作用.如何让它发挥作用?
    查看>>
    oobbs开发手记
    查看>>
    OOM怎么办,教你生成dump文件以及查看(IT枫斗者)
    查看>>
    OOP
    查看>>
    OOP之单例模式
    查看>>
    OOP向AOP思想的延伸
    查看>>
    Vue element 动态添加表单验证
    查看>>
    OO第一次blog
    查看>>
    OO第四单元总结
    查看>>
    OO第四次博客作业
    查看>>
    OO面向对象编程:第三单元总结
    查看>>
    Opacity多浏览器透明度兼容处理
    查看>>
    OPC在工控上位机中的应用
    查看>>
    VSCode在终端中使用yarn命令
    查看>>
    OPEN CASCADE Curve Continuity
    查看>>
    Open Graph Protocol(开放内容协议)
    查看>>