5

我正在研究突然的光线变化下的背景减法。在 OpenCV 或 IPP 中是否有任何示例代码或方法可以有效地做到这一点?我正在阅读视频帧,所以运行时间应该非常快。提前致谢。

4

3 回答 3

4

您需要首先设计某种归一化技术,其中两个帧(一个具有低光照和另一个具有大量光照)都将被归一化并且应该包含非常接近的值。

不幸的是,我遇到了同样的问题,我无法完全解决它,但解决这个问题的一种方法是执行直方图均衡

完成均衡后,您可以继续使用简单的背景减法技术。

于 2012-08-15T21:26:01.320 回答
0

我知道这已经很老了。但我遇到了几乎同样的问题。我所做的是降低所有图像(帧)的 RGB 分量的强度。对于我在街上检测汽车的情况,几乎可以消除阳光引起的突然照明变化。然后将修改后的 RGB 帧提供给背景减法,例如 BackgroundSubtractorMOG2。

这是代码。变量 bitshift 需要根据条件调整为 2 或 4。

void makeIlluminationInvariantRGB(const cv::Mat& frame, cv::Mat& result) {
    frame.copyTo(result);
    uint8_t* pixelPtr = (uint8_t*)result.data;
    int cn = result.channels();
    int bitshift = 3;

    for(int row = 0; row < result.rows; row++)
    {
        for(int col = 0; col < result.cols; col++)
        {
            pixelPtr[row*result.cols*cn + col*cn + 0] = pixelPtr[row*result.cols*cn + col*cn + 0] >> bitshift;

            pixelPtr[row*result.cols*cn + col*cn + 1] = pixelPtr[row*result.cols*cn + col*cn + 1] >> bitshift;

            pixelPtr[row*result.cols*cn + col*cn + 2] = pixelPtr[row*result.cols*cn + col*cn + 2] >> bitshift;
        }
    }
}

希望它可以帮助别人。

于 2017-03-07T07:09:45.900 回答
0

我解决这个问题的方法是对减法模型使用 meanStdDev 公式。如果偏差真的很大,我触发了背景模型的重置。

于 2017-03-09T05:07:28.853 回答