C++ opencv着色

C++ opencv着色,c++,opencv,graphics,computer-vision,C++,Opencv,Graphics,Computer Vision,我正在尝试做一些我以前见过的事情,我认为这很简单,但你知道这是怎么回事 考虑以下代码: vector<Point> polypoints{topleft,topright,bottomright,bottomleft}; vector<vector<Point>> arrayofpolypoints{polypoints}; fillPoly(frame, arrayofpolypoint

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

考虑以下代码:

            vector<Point> polypoints{topleft,topright,bottomright,bottomleft};
            vector<vector<Point>> arrayofpolypoints{polypoints};
            fillPoly(frame, arrayofpolypoints, color3, LINE_8 ,0,Point(0,0));
向量多点{左上、右上、右下、左下};
向量阵列多边形点{多点};
fillPoly(帧,arrayofpolypoints,color3,LINE_8,0,Point(0,0));
我取4个给定点,在垫子图像上绘制/填充多边形。很简单,对吧?现在,我希望这个多边形有透明度,或阴影,该地区,而不是使其固体(或阴影与固体边界将很好)。但OpenCV中似乎没有任何函数可以实现这一点,所以现在我必须发明一些东西。有什么想法吗


我想最好是在另一张空白的垫子图像上画多边形,然后一步一步地穿过每一个像素,然后把每一个像素(或某种比例)都涂掉。然后,我可以以某种方式结合最初的框架和新的垫子。这有意义吗?

我最后做了以下几件事:

                            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));
                        }
                    }
                 }
            }
向量多点{左上、右上、右下、左下};
向量阵列多边形点{多点};
destimage=Scalar::all(0);
填充多边形(目标图像,阵列多边形点,颜色3,线8,0,点(0,0));
双透明度=0.5;
for(int i=0;i
也许会有帮助