2

我在使用 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));

我应该让角与盒子对齐,但不是。是否需要进行转换才能访问真实坐标?

在此处输入图像描述

4

2 回答 2

1

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

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

于 2013-05-23T00:00:47.740 回答
0

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

于 2013-05-22T22:29:28.003 回答