C++ 使用Mat OpenCV访问像素

C++ 使用Mat OpenCV访问像素,c++,image,opencv,rgb,pixel,C++,Image,Opencv,Rgb,Pixel,我想用OpenCV 2.3访问RGB中的像素。 我试着这样做,但好像每一个像素都是一帧一帧相等的,因为我没有得到输出。图像来自我的网络摄像头,我可以看到它们。 顺便说一句,红色=0 THX Mat框架; 垫旧框架; 视频捕获上限(0); cap>>旧框架; sumFramePix=oldFrame.cols*oldFrame.rows; nbChannels=oldFrame.channels(); 不能改变 到 您正在创建指向相同数据的两个Mat对象clone()进行深度复制。最好使用fram

我想用OpenCV 2.3访问RGB中的像素。 我试着这样做,但好像每一个像素都是一帧一帧相等的,因为我没有得到输出。图像来自我的网络摄像头,我可以看到它们。 顺便说一句,红色=0

THX

Mat框架;
垫旧框架;
视频捕获上限(0);
cap>>旧框架;
sumFramePix=oldFrame.cols*oldFrame.rows;
nbChannels=oldFrame.channels();
不能改变

您正在创建指向相同数据的两个Mat对象
clone()
进行深度复制。

最好使用
frame.copyTo(oldFrame)
避免为每个帧重新分配内存。
Mat frame;
Mat oldFrame;

VideoCapture cap(0);
cap >> oldFrame;
sumFramePix = oldFrame.cols * oldFrame.rows;
nbChannels = oldFrame.channels();
cout << "NbcHANNELs : " << nbChannels << endl;
imshow("Video 1", oldFrame);

while(1)
{
    cap >> frame;
    imshow("Video 1", frame);

    for(int i=0; i<frame.rows; i++)
    {
        for(int j=0; j<frame.cols; j++)
        {
            if (frame.ptr<uchar>(i)[nbChannels*j+RED] < oldFrame.ptr<uchar>(i)[nbChannels*j+RED])
            {
                cout << "==============-";
            }
        }
    }
    oldFrame = frame;

    if(waitKey(300) >= 0) break;
}
oldFrame = frame;
oldFrame = frame.clone();