捉虫记录:图像bug杂记25-26日


BUG 1:GDI+ Image::FromFile 无效,调用图像指针始终为NULL

m_pImg = Gdiplus::Bitmap::FromFile(m_imgFilePath);
m_pImg为NULL

原因是没有初始化GDI+。
Solution:
1、声明两个全局变量: 
GdiplusStartupInput    m_Gdistart; 
ULONG_PTR    m_GdiplusToken; 

2、在其初始化函数InitInstance()中添加: 
GdiplusStartup(&m_GdiplusToken,& m_Gdistart,NULL); 
 
3、在需要调用 GDI+中的函数的页面上方 或者 在头文件 stdafx.h 中添加: 
#include "gdiplus.h" 
using namespace Gdiplus; 


BUG2:GDI+  new Bitmap不能接受三个参数
//创建目标Bitmap 
Bitmap *bmpDest = new Bitmap(destWidth, destHeight, m_pImg->GetPixelFormat());

原因是微软的 DEBUG_NEW  和 GDI+ 不匹配造成的。
Solution:将以下三行注释掉
//#ifdef _DEBUG
//#define new DEBUG_NEW
//#endif





BUG3:BGR BGR BGR to RRRGGGBBB,转化出错,图片颜色不一样
见下图:


最后我将图片读入MATLAB分析,发现:

A1 转化后,B1原图,发现出现的是值的差别,最后定位如下:



BUG4:不同图像显示出错,如下所示:

正常结果


异常结果

遇到这个结果,我首先想到的是——是不是图片数据的方向搞错了,因为之前就是搞错了数据的存放方式,原本数据按列存放,结果我按行处理就出现的严重的变形,不过那样的图片结果基本看不出原来的任何图片形状。然后,我就想到了另一个问题,也就是不久前刚碰到的一个问题,即在我在一张扩展边缘后的图片上截取原始图片大小的时候,在偏移下标位置时,不小心少算了一个像素,结果就造成了如上图般类似的结果。但是,这应该不会是这个问题,因为不是每张图片都出现这样的问题。
那么,我接着就想,会不会是因为图片高宽的影响,程序适用于height大于width的情况,实验如下:

很不幸,不是这样子的原因。
~~~~~~~~接着~~~我试了如下可能:
(1)是否是图片像素格式不一样,程序里面貌似是图片貌似适用于24位,可能图片是32位;
(2)是否是图片大小的问题。

最后发现,原来是因为图片的长宽的奇数问题——程序写的不够鲁棒。



本文地址:http://blog.csdn.net/linj_m/article/details/34414289
更多资源 请关注 博客:LinJM-机器视觉  微博:林建民-机器视觉



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值