预备知识
cvAddWeighted函数格式:
/* dst = src1 * alpha + src2 * beta + gamma */
CVAPI(void) cvAddWeighted( const CvArr* src1, double alpha,
const CvArr* src2, double beta,
double gamma, CvArr* dst );
参数:
- src1 第一个原数组.
- alpha 第一个数组元素的权值
- src2 第二个原数组
- beta 第二个数组元素的权值
- gamma 添加的常数项
- dst 输出数组
函数 cvAddWeighted 计算两数组的加权值的和: dst(I)=src1(I)*alpha+src2(I)*beta+gamma 所有的数组必须有相同的类型相同的大小或ROI大小.
说明:
在cvAddWeighted函数中,有两个源图象src1 和 src2。这两个图象可以是任何象素类型,只要它们的类型相同。它们可以是单通道或是三通道,只要它们相符。运算结果的目标图象,dst必须和src1和src2有相同的象素类型。这些图象可以是不同的尺寸,但它们的ROI必须有相同的大小,否则OpenCV会报告一个错误。参数 alpha 是src1的混合强度,beta是src2的混合强度。
参考代码
IplImage* ImageAlpha(IplImage *pImg){
CvFont font;
float alpha_value;
char alpha_str[10];
IplImage *src1 = cvCloneImage(pImg);
IplImage *src2 = cvCreateImage(cvSize(src1->width/5, src1->height/5),src1->depth, src1->nChannels);
cvResize(src1, src2);
for (int x = 0; x < 5; x+=1){
for (int y = 0; y < 5; y+=1){
alpha_value = (float)(x+y*5)/(5 * 5-1);
sprintf(alpha_str, "%.3f", alpha_value);
cvSetImageROI(src1,cvRect(x*(src1->width/5),y*(src1->height/5),
src1->width/5, src1->height/5));
cvAddWeighted(src2, alpha_value, src1, 1 - alpha_value, 0, src1);
cvResetImageROI(src1);
}
}
return src1;
}
输出结果:
关于Image Engineering & Computer Vision的更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.