首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

opencv 将图片中白色部分转化为透明,该怎么解决

2012-02-24 
opencv将图片中白色部分转化为透明opencv中文论坛好冷清呀!来这里转转。vc6.0 + opencv1.0我用CvvImage::Lo

opencv 将图片中白色部分转化为透明
opencv中文论坛好冷清呀!来这里转转。

vc6.0 + opencv1.0

我用CvvImage::Load加载图片,但是alpha channel被忽略了。
我想手动将其转化为RGBA,将白色的部分转化为透明的, 以下是我的实现代码

C/C++ code
// m_cvImageSmall为待转化的图片// m_p4Channel 为转化后的   IplImage *dst = 0;            CvSize dst_cvsize;      IplImage * src = m_cvImageSmall.GetImage();      dst_cvsize.width = src->width;   dst_cvsize.height = src->height;      dst = cvCreateImage( dst_cvsize, src->depth, 4);   int x;   int y;   uchar r, g, b;   for (y = 0; y < src->height; y++)   {      uchar *ptrSrc = (uchar*)(src->imageData + y * src->widthStep);      uchar *ptrDst = (uchar*)(dst->imageData + y * dst->widthStep);      for (x = 0; x < src->width; x++)      {         r = ptrSrc[3 * x];         g = ptrSrc[3 * x + 1];         b = ptrSrc[3 * x + 2];         ptrDst[4 * x] = r;         ptrDst[4 * x + 1] = g;         ptrDst[4 * x + 2] = b;         if (255 == r && 255 == g && 255 == b)//白色部分为透明            ptrDst[4 * x + 3] = 0;         else            ptrDst[4 * x + 3] = 255;      }   }      m_p4Channel = dst;


但是我把m_p4Channel画在界面上时,程序退出。
C/C++ code
      if (m_p4Channel)      {         CvvImage img;         img.CopyOf(m_p4Channel, 4);//---------------------这里出问题了。         CRect rc4Channel(0, 0, img.Width(), img.Height());         img.DrawToHDC(memDC.GetSafeHdc(), &m_rcCropDst);      }


应该还是透明处理出问题了吧。
我看不出哪里出问题。
请指教。

[解决办法]
代码风格挺好的,看不出有什么问题啊。
if (255 == r && 255 == g && 255 == b)//白色部分为透明
这里设个阈值好点。

热点排行