我有一个由不同颜色的段组成的多边形(示例图像上的红色和绿色)。
对于多边形(灰色区域)中的每个像素,我需要计算系数以获得像素的颜色: pix_color= red * Ca + green * Cb
边界条件是边界颜色系数必须=1(例如红色边界的Ca=1 Cb=0)。
所以我想在多边形的内部区域实现从红色到绿色的“平滑”过渡。
我该怎么做?
更新 2: 我尝试了 3 种颜色边框和非凸多边形的算法。
这是我的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在分区的边界上。