opencv sustracción de fondo

Tengo una imagen de la escena de fondo y una imagen de la misma escena con objetos al frente. Ahora quiero crear una máscara del objeto en primer plano con sustracción de fondo. Ambas imágenes son RGB.

Ya he creado el siguiente código:

cv::Mat diff;
diff.create(orgImage.dims, orgImage.size, CV_8UC3);
diff = abs(orgImage-refImage);

cv::Mat mask(diff.rows, diff.cols, CV_8U, cv::Scalar(0,0,0));
//mask = (diff > 10);

for (int j=0; j<diff.rows; j++) {
    // get the address of row j
    //uchar* dataIn= diff.ptr<uchar>(j);
    //uchar* dataOut= mask.ptr<uchar>(j);
    for (int i=0; i<diff.cols; i++) {
        if(diff.at<cv::Vec3b>(j,i)[0] > 30 || diff.at<cv::Vec3b>(j,i)[1] > 30 || diff.at<cv::Vec3b>(j,i)[2] > 30)
            mask.at<uchar>(j,i) = 255;
    }
}

No sé si estoy haciendo esto bien?

Respuestas a la pregunta(2)

Su respuesta a la pregunta