VC2008中使用GDI+ (2)

 
GDI+中的Bitmap类可以用来读取各种格式的图片文件,并对图片进行操作。下面内容主要应用到对图片中每个像素的处理。
应该要用到Curvelets来对图像进行处理,先说一下如何配置项目。
1.         先确认下Curvelets库的包中有dll和lib文件,还有几个头文件。另外的测试程序告诉你如何应用Curvelets的。
2.         新建一个MFC项目,将所有文件复制到项目目录下。项目属性中的链接器选项中,把lib文件名加入到“依赖项”中。将所有头文件加入MFC预编译头中。
3.         在应用Curvelets的时候,记得引用std命名空间和Curvelets的命名空间。
 
下面用几个代码段来说明如何应用Curvelets对图像进行处理。
假设现在在类(比如文档类)中有m_img为Bitmap,m_matrixR、m_matrixG、m_matrixB为CpxNumMat(复矩阵)。将图片文件读到m_img中,然后对每个像素进行处理,得到RGB颜色分量的三个复矩阵(由于RGB单个分量只是0到254而已,只用整数矩阵即可,但Curvelets只提供了复矩阵进行运算,而且和整数矩阵并没有继承关系,这点有点遗憾,因为整数当然是复数的特例啦)。之后对每个复矩阵进行Curvelets变换。反变换是此的逆过程就不再说明了。下面分别来看下。
1.         将图片文件读到m_img中
m_img  =  Gdiplus::Bitmap::FromFile(L " h:/01.jpg " );

2.         对每个像素进行处理,得到RGB颜色分量的三个复矩阵
             int  h  =  m_img -> GetHeight();
    
int  w  =  m_img -> GetWidth();
    m_matrixR 
=   new  CpxNumMat(h, w);
    m_matrixG 
=   new  CpxNumMat(h, w);
    m_matrixB 
=   new  CpxNumMat(h, w);
    
for ( int  i = 0 ; i < h; i ++ )
             
for ( int  j = 0 ; j < w; j ++ )
            
{
        Gdiplus::Color c(
000);
        m_img
->GetPixel(i, j, &c);
        (
*m_matrixR)(i,j) = cpx(c.GetR(), 0);
        (
*m_matrixG)(i,j) = cpx(c.GetG(), 0);
        (
*m_matrixB)(i,j) = cpx(c.GetB(), 0);
            }


3.    对复矩阵进行 Curvelets 变换
        
                vector <  vector < CpxNumMat >   >  c;
         
int  m = m_matrixR -> m();
         
int  n = m_matrixR -> n();
         
int  nbscales  =   8 ;
         
int  nbangles_coarse  =   1 ;
         
int  ac  =   0 ;
         fdct_wrapping(m, n, nbscales, nbangles_coarse, ac, 
* m_matrixR, c);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值