OpenCV Android错误的坐标

时间:2013-05-22 22:23:43

标签: android c++ opencv

我面临一个非常奇怪的OpenCV for Android问题: 当我使用Mat.at访问像素时,它会在屏幕上显示错误的像素: 一个简单的例子:

for( double y = (mat.rows - h) / 2 ; y < (mat.rows + h) / 2 ; y++ ) {
    for( double x = (mat.cols - w) / 2; x < (mat.cols + w) / 2; x++ ) {
        for( int c = 0; c < 3; c++ ) {
            mat.at<Vec3b>(y,x)[c] =
                saturate_cast<uchar>( 255 );

        }
    }
}

circle(mat, Point((mat.cols - w) / 2, (mat.rows - h) / 2), 10, Scalar(255,0,0,255));
circle(mat, Point((mat.cols + w) / 2, (mat.rows - h) / 2), 10, Scalar(255,0,0,255));
circle(mat, Point((mat.cols - w) / 2, (mat.rows + h) / 2), 10, Scalar(255,0,0,255));
circle(mat, Point((mat.cols + w) / 2, (mat.rows + h) / 2), 10, Scalar(255,0,0,255));

我应该让角落与盒子对齐但不是。 是否存在转换以便访问真实坐标?

enter image description here

2 个答案:

答案 0 :(得分:1)

您不会发布mat的初始化,但它似乎已初始化为CV_8UC4类型。这意味着使用mat.at<cv::Vec3b>访问图片会为您提供不正确的像素位置。必须使用at<cv::Vec4b>访问四通道图像以提供正确的像素位置,即使您只修改了三个通道,如示例所示。

无关:不建议将double用作计数器变量类型。

答案 1 :(得分:0)

这是一个很长的镜头,但它可能对你有帮助。这是SDK模拟吗?我记得有过问题。当我在设备中尝试我的代码时,它就像一个魅力。