0

我有一个由不同颜色的段组成的多边形(示例图像上的红色和绿色)。

对于多边形(灰色区域)中的每个像素,我需要计算系数以获得像素的颜色: pix_color= red * Ca + green * Cb

边界条件是边界颜色系数必须=1(例如红色边界的Ca=1 Cb=0)。

所以我想在多边形的内部区域实现从红色到绿色的“平滑”过渡。

我该怎么做?

在此处输入图像描述

更新 2: 我尝试了 3 种颜色边框和非凸多边形的算法。 http://dl.dropbox.com/u/8841028/blending/polygon_full.png

这是我的opencv代码

 //a=red border,b=green,c= blue, da,db,dc min dist to borders.
    Vec3b pix_ab; 
    pix_ab[2]= r_a*db/(da+db)+r_b*da/(da+db);
    pix_ab[1]= g_a*db/(da+db)+g_b*da/(da+db);
    pix_ab[0]= b_a*db/(da+db)+b_b*da/(da+db);
    Vec3b pix_ac; 
    pix_ac[2]= r_a*dc/(da+dc)+r_c*da/(da+dc);
    pix_ac[1]= g_a*dc/(da+dc)+g_c*da/(da+dc);
    pix_ac[0]= b_a*dc/(da+dc)+b_c*da/(da+dc);
    Vec3b pix_bc;
    pix_bc[2]= r_b*dc/(db+dc)+r_c*db/(db+dc);
    pix_bc[1]= g_b*dc/(db+dc)+g_c*db/(db+dc);
    pix_bc[0]= b_b*dc/(db+dc)+b_c*db/(db+dc);

    img(y,x)[0]= (pix_ab[0]+pix_ac[0]+pix_bc[0])/3;
    img(y,x)[1]= (pix_ab[1]+pix_ac[1]+pix_bc[1])/3;
    img(y,x)[2]= (pix_ab[2]+pix_ac[2]+pix_bc[2])/3;

但问题是,例如通过条件蓝色边框影响的不是所有多边形区域,而是某些子区域,如果我使用我的公式,我会在区域的边界上得到明显的差异,所以我认为我需要以某种方式强制蓝色为 = 0在分区的边界上。

在此处输入图像描述

4

1 回答 1

2

给每个内部像素 4 个值,表示上、下、左、右到最近边缘的距离。使用最低的绿色和最低的红色值来计算 Ca 和 Cb。

即对于我的图表上粗略标记的像素,我建议它是红色 40,绿色 20,或者绿色是红色的两倍,或者 Ca = 0.333 和 Cb = 0.666

在此处输入图像描述

于 2013-04-03T11:01:52.873 回答