C ++: OpenCV: itération rapide des pixels

Je vais essayer d'obtenir BGR valeurs à partir d'un flux de l'image de la webcam. Je suis une violation d'accès mémoire parce que je ne suis pas en utilisant le pointeur correctement dans le imbriqués pour la boucle, mais je ne sais pas ce que la syntaxe devrait être. Je ne peux pas trouver de la documentation qui est assez spécifique à l'apparence de base de la tâche que je suis en train de faire.

En plus de problèmes qu'il violation d'accès mémoire, je veux aussi être en mesure de modifier chaque pixel à la volée sans avoir à faire une copie en profondeur, mais ne savons pas ce qu'il a de la syntaxe doit être pour cela aussi.

C'est le code que j'ai pour l'instant:

int main(int argc, char** argv)
{

    int c;
    Mat img;
    VideoCapture capture(0);
    namedWindow("mainWin", CV_WINDOW_AUTOSIZE);
    bool readOk = true;

    while (capture.isOpened()) {

        readOk = capture.read(img);

        //make sure we grabbed the frame successfully 
        if (!readOk) {
            std::cout << "No frame" << std::endl;
            break;
        }

        int nChannels = img.channels();
        int nRows = img.rows;
        int nCols = img.cols * nChannels;

        if (img.isContinuous())
        {
            nCols *= nRows;
            nRows = 1;
        }

        int i, j;
        uchar r, g, b;
        for (i = 0; i < nRows; ++i)
        {
            for (j = 0; j < nCols; ++j)
            {
                r = img.ptr<uchar>(i)[nChannels*j + 2];
                g = img.ptr<uchar>(i)[nChannels*j + 1];
                b = img.ptr<uchar>(i)[nChannels*j + 0];
            }
        }

        if (!img.empty()) imshow("mainWin", img);
        c = waitKey(10);
        if (c == 27)
            break;
    }
}

source d'informationauteur user2514676