opencv 将图片中白色部分转化为透明
opencv中文论坛好冷清呀!来这里转转。
vc6.0 + opencv1.0
我用CvvImage::Load加载图片,但是alpha channel被忽略了。
我想手动将其转化为RGBA,将白色的部分转化为透明的, 以下是我的实现代码
// 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;
if (m_p4Channel) { CvvImage img; img.CopyOf(m_p4Channel, 4);//---------------------这里出问题了。 CRect rc4Channel(0, 0, img.Width(), img.Height()); img.DrawToHDC(memDC.GetSafeHdc(), &m_rcCropDst); }