使用opencv绘制阴影



我试着做一些我以前见过的事情,我认为会很简单,但你知道这是怎么回事。

考虑以下代码:

            vector<Point> polypoints{topleft,topright,bottomright,bottomleft};
            vector<vector<Point>> arrayofpolypoints{polypoints};
            fillPoly(frame, arrayofpolypoints, color3, LINE_8 ,0,Point(0,0));

我取4个给定点并在Mat图像上绘制/填充多边形。简单,是吧?现在我想要这个多边形有透明度,或阴影,面积,而不是使它实心(或阴影与实心的边界会很好)。但似乎在OpenCV中没有功能已经做到了这一点,所以现在我必须发明一些东西。什么好主意吗?

我认为在另一个空白的Mat图像上绘制多边形可能会更好,然后通过每个像素和黑色的每一个其他的(或某种比例)。然后我就可以把原来的坐标系和新的坐标系结合起来,明白了吗?

最后我做了以下的事情:

                            vector<Point> polypoints{topleft,topright,bottomright,bottomleft};
            vector<vector<Point>> arrayofpolypoints{polypoints};
            destimage = Scalar::all(0);
            fillPoly(destimage, arrayofpolypoints, color3, LINE_8 ,0,Point(0,0));
            double transparency = 0.5;
            for (int i = 0; i < frame.cols; i++) {
                for (int j = 0; j < frame.rows; j++) {
                    Vec3b &intensity = frame.at<Vec3b>(j, i);
                    Vec3b &intensityoverlay = destimage.at<Vec3b>(j, i);
                    for(int k = 0; k < frame.channels(); k++) {
                        uchar col = intensityoverlay.val[k];
                        if (col != 0){
                            intensity.val[k] = (intensity.val[k]*(1-transparency) + (transparency*col));
                        }
                    }
                 }
            }

最新更新