本文共 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
修复步骤如下:
通过逐步检查和修正这些问题,我应该能够解决程序的异常问题。
转载地址:http://mrsfk.baihongyu.com/