【问题标题】:Shading with opencv用opencv着色
【发布时间】:2016-06-30 18:48:29
【问题描述】:

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

考虑下面的代码:

            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 图像上绘制多边形可能会更好,然后逐步遍历每个像素并每隔一个像素(或某种比例)涂黑。然后我可以以某种方式将初始帧和新的 Mat 结合起来。这有意义吗?

【问题讨论】:

  • 也许this 会有所帮助

标签: c++ opencv graphics computer-vision


【解决方案1】:

我最终做了以下事情:

                            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));
                        }
                    }
                 }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多