您当前的位置: 首页 >  opencv

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4642博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

OpenCV绘制半透明效果的代码

柳鲲鹏 发布时间:2019-02-13 14:12:24 ,浏览量:0

  与网上大多数不同的是,本博贴出的代码,不仅经过测试运行,还检查结果是否正确。以这里代码为例,与网上不同的是:

  1. 专门区分了源图的透明度和子图的透明度。因为源图的透明度不为1,整体画面就会变暗。
  2. 专门对子图进行了清理动作。否则转成图片之后,会发现图片的顶部总是会有乱纹。

  代码如下: 

//为什么要区分?因为ALPHA_SOURCE!=1,那么画面变灰,效果不如人意。具体可以自己体验

#define  ALPHA_SOURCE       1
#define  ALPHA_POLYGON      0.5

void AlphaImage(IplImage* pImage, int x, int y, int width, int height)
{
    CvScalar color;
    color.val[0] = 0xFF;
    color.val[1] = 0;
    color.val[2] = 0;
    color.val[3] = 0;

    IplImage * pTemp=cvCreateImage(cvSize(width,height), pImage->depth, pImage->nChannels);
    //把图设置为空。
    cvSet(pTemp, CV_RGB(0,0,0), NULL);
    //根据需要,是否要填充
    cvRectangle(pTemp, cvPoint(0,0), cvPoint(width,height), color, -1);

    cvSetImageROI(pImage, cvRect(x, y, width, height));
    //注意两个Alpha的不同。
    cvAddWeighted(pImage, ALPHA_SOURCE, pTemp, ALPHA_POLYGON, 0.0, pImage);
    cvResetImageROI(pImage);

    //释放内存
    cvReleaseImage(&pTemp);
}

//由一个char*转换为IplImage
//SIZE_RGB=3
int create_image(const char* pRgbData, const int width, const int height)
{
    CvSize size;
    size.width = width;
    size.height= height;

    IplImage* iplImage = cvCreateImageHeader(size, IPL_DEPTH_8U, SIZE_RGB);
    //注意,这里只能是size.width,不能再加上height
    cvSetData(iplImage, pRgbData, size.width*SIZE_RGB);

    AlphaImage(iplImage...);
}

 

关注
打赏
1665724893
查看更多评论
立即登录/注册

微信扫码登录

0.0513s