opencv中文论坛
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;elseptrDst[4 * x + 3] = 255;} }m_p4Channel = dst;
但是我把m_p4Channel画在界面上时,程序退出。
C/C++ codeif (m_p4Channel){CvvImage img;img.CopyOf(m_p4Channel, 4);//---------------------这里出问题了。CRect rChannel(0, 0, img.Width(), img.Height());img.DrawToHDC(memDC.GetSafeHdc(), &m_rcCropDst);}
应该还是透明处理出问题了吧。opencv中文论坛
我看不出哪里出问题。
请指教。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-21843-1.html
免得百拳来
好事情啊
早都预料该公司要出事