我在Eclipse中使用OpenCV。

我需要检测人的皮肤,因此将图像转换为HSV,然后使用inRange函数获得皮肤为白色的图像Mat。

问题是,现在,我需要检测白色的成分是哪些来修改原始帧中的像素(我正在用摄像机更改皮肤的颜色),但是我无法访问InRange中返回的Mat

cvtColor(frame,frame,CV_BGR2HSV);
        Mat n;
        inRange(frame, Scalar(0, 10, 60), Scalar(20, 150, 255), n);


        for(int i=0;i<frame.rows;i++)
        {
            for(int j=0;j<frame.cols;j++)
            {

                n.at(&i);
                            //n(i,j);

            }
        }

那是有问题的代码。当我进入内部循环时,构建失败,给出了很多引用模板的错误。

谁知道我如何访问此矩阵?还有另一种方法可以实现我的目标吗?也许我使问题复杂化了。

谢谢你的时间。

最佳答案

与inRange等无关,只是Mat的访问代码被破坏了。

Vec3b & hsvPixel = n.at<Vec3b>(i,j);
// hsvPixel[0] = h;
// hsvPixel[1] = s;
// hsvPixel[2] = v;

10-07 22:16