原创 VC2008中使用GDI+ (2) 收藏

新一篇: NHibernate小结之一 | 旧一篇: VC2008中使用GDI+ (1)

 
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);

发表于 @ 2008年05月23日 21:54:17|评论(loading...)|编辑

新一篇: NHibernate小结之一 | 旧一篇: VC2008中使用GDI+ (1)

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © HeLiang7