我有一个由不同颜色的段组成的多边形(样本图像上的红色和绿色)。在多边形中混合颜色
以及在多边形(灰色区域)的每个像素我需要计算系数以获得像素的颜色: pix_color =红色*的Ca +绿色*的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。
[双线性插值](http://en.wikipedia.org/wiki/Bilinear_interpolation)不适合你吗?正如保罗所建议的那样,您只需从四个边缘获得颜色。边缘中的颜色数量无关紧要,只需添加RGB值即可。 –
@George Aprilis我不明白在多边形的情况下我需要选择哪些点。 – mrgloom
使用边将多边形分成三角形将是最好的选择,但我认为保罗提到的方法应该可行。如果以相同的方式插入每个R,G,B值,则边缘的颜色可以是任何东西。 –