Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV:光线突然变化时的背景减法_Opencv_Background_Background Image_Image Segmentation - Fatal编程技术网

OpenCV:光线突然变化时的背景减法

OpenCV:光线突然变化时的背景减法,opencv,background,background-image,image-segmentation,Opencv,Background,Background Image,Image Segmentation,我正在研究光线突变下的背景减法。在OpenCV或IPP中是否有有效的示例代码或方法?我正在看视频帧,所以运行时间应该很快。提前谢谢 您需要首先设计某种规格化技术,其中两个帧(一个光照较低,另一个光照较多)都将规格化,并且应该包含非常接近的值 不幸的是,我有同样的问题,我不能完全解决它,但解决这个问题的一个方法是执行 完成均衡后,您可以继续使用简单的背景减法技术。我知道这已经过时了。但我也有同样的问题。我所做的是降低所有图像(帧)的RGB分量的强度。对于我在街上检测汽车的案例,几乎可以消除阳光引起

我正在研究光线突变下的背景减法。在OpenCV或IPP中是否有有效的示例代码或方法?我正在看视频帧,所以运行时间应该很快。提前谢谢

您需要首先设计某种规格化技术,其中两个帧(一个光照较低,另一个光照较多)都将规格化,并且应该包含非常接近的值

不幸的是,我有同样的问题,我不能完全解决它,但解决这个问题的一个方法是执行


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

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

这是代码。根据具体情况,可能需要调整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;
        }
    }
}
void makeIlluminationInvariantRGB(常量cv::Mat&frame,cv::Mat&result){
frame.copyTo(结果);
uint8_t*像素ptr=(uint8_t*)result.data;
int cn=result.channels();
int位移位=3;
for(int row=0;row>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;
}
}
}

希望它能帮助别人

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

亲爱的Masad和Astor,非常感谢您的回答和建议。当做