java - 从 imageview 触摸点,您可以调整 MAT 的大小以获得该点的颜色吗?

标签 java android opencv touch-event

在横向模式下,我使用 myImageView.setImageBitmap(myBitmap) 并使用 ontouch 监听器来接收 getXgetY 并调整 myImageView 的位置(与 getRawXgetRawY 相同)。然后,我使用 bitmapToMat 构建一个 MAT,以使用 OpenCV 进一步处理图像。我发现了两个调整大小的场景,其中 onTouch 位置会在我触摸的位置精确绘制一个圆圈,但有时该位置会在 Mat 之外并导致 NPE 并在处理过程中失败。

场景 1:resize(myImageView.getWidth(), myImageView.getHeight())

场景 2:resize(myImageView.getHeight(), myImageView.getWidth())

x = x(myImage.getHeight()/myImageView.getWidth())

y = y(myImage.getWidth()/myImageView.getHeight())

如果我不更改 x,y,我可以在没有 NPE 的情况下点击图像中的任何地方,但绘制的圆圈离我触摸的地方不远。

处理完 matToBitmap(myMAT, newBitmap)myImageView.setImageBitmap(newBitmap)

我显然遗漏了一些东西,但是是否有一种简单的方法来获取触摸位置并在 MAT 中使用该位置?任何帮助都是极好的!

最佳答案

您必须偏移触摸坐标,因为 View 可能比垫子大或小。像这样的东西应该可以工作

private Scalar getColor(View v, MotionEvent event){
    int cols = yourMat.cols();
    int rows = yourMat.rows();

    int xOffset = (v.getWidth() - cols) / 2;
    int yOffset = (v.getHeight() - rows) / 2;

    int x = (int)event.getX() - xOffset;
    int y = (int)event.getY() - yOffset;

  Point  touchedPoint    = new Point(x,y);

  Rect   touchedRect = new Rect();

    touchedRect.x = (x>4) ? x-4 : 0;
    touchedRect.y = (y>4) ? y-4 : 0;

    touchedRect.width = (x+4 < cols) ? x + 4 - touchedRect.x : cols - touchedRect.x;
    touchedRect.height = (y+4 < rows) ? y + 4 - touchedRect.y : rows - touchedRect.y;

    Mat touchedRegionRgba = yourMat.submat(touchedRect);

    Scalar mBlobColor = Core.mean(touchedRegionRgba);

    touchedRegionRgba.release();

    return mBlobColor;
}

关于java - 从 imageview 触摸点,您可以调整 MAT 的大小以获得该点的颜色吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217071/

相关文章:

android - 运行使用 OpenCV 的 Android 应用程序时出错

python - Adobe Photoshop 风格的色调分离和 OpenCV

java - Eclipse - 不兼容的 JVM。 JVM 1.8.0_261 版本不适合本产品。版本 : 11 or greater is required

Java从字节数组播放多媒体文件

java - GemFire 8.2.0 集群在cache.xml 中使用静态服务器列表

java - Google Places API - 保存 place_id 并违反条款和条件

android - AudioPolicyManagerBase 错误

适用于 Android 的 OpenCV,支持 NDK : issue with updating from 4. 1.0 至 4.1.1

java - 为什么我无法检查字符串中字符的成员资格?

android - android studio项目和IDE中的错误