android - OpenCV Android 坐标错误

标签 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

最佳答案

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

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

关于android - OpenCV Android 坐标错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702597/

相关文章:

java - 如何从返回的 HttpResponse 获取特定值

c++ - 条件和文件

c++ - std::vector 中的每个元素访问都是缓存未命中吗?

c++ - VC 2008 fatal error C1047 cplus 修复了吗?

python - 使用 opencv-2.4.2 安装 pyopencv 2.1.0 时遇到错误

c++ - 如何在应用颜色校正之前线性化输入图像?

android - 检测是否有其他应用程序正在运行

java - 使用 Android DataBinding 时强制点 (“.” ) 作为小数点分隔符

android - 访问 Android 相机框架而不进行预览

java - 当我尝试在 Android 中打开对话框时,为什么会出现 NullPointerException?