OpenCV2.1下cvLoadImage彩色大图的BUG

今天遇到了一个情况,使用OpenCV 2.1 的cvLoadImage 函数load一张1902*1080的彩色bmp 时,会报内存错误,但是load 1张512*512的彩色bmp就不会有这个问题。换成OpenCV2.3.1,就不存在这种情况。后来才发现是OpenCV2.1本身存在的bug,内存访问越界。具体描述与修正见:

http://www.cnblogs.com/hanming/archive/2011/01/21/2276210.html

patch for file: 
src/highgui/grfmt_bmp.cpp (line 198)

change from: 

AutoBuffer _src, _bgr;

if( (m_bpp != 24 || !color) ) 
    _src.allocate(src_pitch + 32);
to:

AutoBuffer _src, _bgr;

// bug fix, otherwise memcpy in getBytes in file bitstrm.cpp will crash 
if ( 4096 < src_pitch) 
{ 
    _src.allocate( src_pitch + (8 * nch) ); 
    _bgr.allocate( src_pitch + (8 * nch) ); 
}

if( (m_bpp != 24 || !color) ) 
    _src.allocate(src_pitch + 32);

修改完之后,需要重新编译OpenCV2.1.我用的是VS2008,具体操作流程见: http://wiki.opencv.org.cn/index.php/VC_2008_Express%E4%B8%8B%E5%AE%89%E8%A3%85OpenCV2.0/2.1

注意,如果以前使用过CMake编译过OpenCV,请先点击File菜单下的Delete Cache ,删除缓存文件,以免配置得不到更新。


因为很久以前编译的OpenCV2.1,后来中间又安装了Python2.7,导致我在ReBuild OpenCV工程时报了一个错:Cannot Open File 'python27_d.lib'

解决方法还挺多,我直接采用了一个简单的处理方法(http://blog.csdn.net/lbsswu/article/details/6292775):

从网上下一个python27_d.lib,放到D:/Program Files/Microsoft Visual Studio 9.0/VC/lib文件夹下(根据自己装VS2008的位置做相应的调整),再次编译即可成功。


另外,每次添加环境变量时,都需要注销或重启系统才能生效。


我的体会是:旧库就是会存在很多小bug,记得以前做大作业时发现OpenCV2.1还有个经典的bug就是视频处理时无法准确定位到某一帧视频,但是OpenCV1.0却没这个问题,后续新库不知道完善了没有(这个bug的具体描述可参见:http://blog.csdn.net/friedvan/article/details/6195777)。

总的来说假如不是开发过程中版本过度很麻烦的话,应该优先使用最新库啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值