ANDROID - 使用 openCV 进行颜色检测 - 如何?

2023-12-27

我的目标是使用 HSV 颜色空间以仅显示黄色对象的方式显示脱粒图像。我使用这个代码(基于 openCV 2.3.1 android 示例给出的代码):

protected Bitmap processFrame(VideoCapture capture) {
    //capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
    //Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

    capture.retrieve(mHSV, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
    Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4);
    //Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba);

    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);

    if (Utils.matToBitmap(mRgba, bmp))
        return bmp;

    bmp.recycle();
    return null;
}

基(抽象)类包含“run”方法:

protected abstract Bitmap processFrame(VideoCapture capture);

public void run() {
...
bmp = processFrame(mCamera);
...
canvas.drawBitmap(bmp, (canvas.getWidth() - bmp.getWidth()) / 2, (canvas.getHeight() - bmp.getHeight()) / 2, null);
...
}

i get this distorted preview which i think i can understand (HSV format) but why is it repeating itself (i`v draw a green line to emphasize it) 4 time? and what is the black horizontal line? enter image description here what am i doing wrong?

最后一件事,背后的逻辑是什么:

Imgproc.cvtColor(mHSV, mRgba, Imgproc.COLOR_RGB2HSV, 4);

为什么是COLOR_RGB2HSV?不应该是COLOR_HSV2RGB吗?

假设我已经解决了这个问题,我怎样才能用黄色对象的本色制作灰度图像?我想使用 Core.inRange() 方法,但是当我这样做时,我得到黑屏。

是的,我想我看起来像个混蛋,但我需要从某个地方开始,不是吗?

10x!

更新1:我尝试这样做 RGB->HSV->RGB:

 @Override
protected Bitmap processFrame(VideoCapture capture) {
    //capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
    //Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

    capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB);
    Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_RGB2HSV,0);
    //Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_BGR2RGB, 4);
    //Core.inRange(mRgba, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mRgba);
    Imgproc.cvtColor(mHSV,mRgba , Imgproc.COLOR_HSV2RGB,0);

    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);

    if (Utils.matToBitmap(mRgba, bmp))
        return bmp;

    bmp.recycle();
    return null;
}

and i got: enter image description here

?

更新2:

我终于明白,在设置帧之前,必须将其转换为RGBA空间。 所以我现在尝试使用以下代码来设置阈值:

capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA);
    Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_RGB2HSV,0);
    Core.inRange(mHSV, new Scalar(20, 100, 100), new Scalar(30, 255, 255), mHSVThreshed);
    Imgproc.cvtColor(mHSVThreshed, mRgba, Imgproc.COLOR_HSV2RGB, 0);
    Imgproc.cvtColor(mRgba, mRgba, Imgproc.COLOR_RGB2RGBA, 0);
    Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);

但现在它让我强制关闭......有什么想法吗?


friends. i give you the result of 1 month of hard work and help from friends across the ocean: enter image description here

伊森是对的。但代码需要一些修复。

代码:

    capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_BGRA);
    Imgproc.cvtColor(mRgba, mHSV, Imgproc.COLOR_BGR2HSV,3);
    Core.inRange(mHSV, new Scalar(0, 100, 30), new Scalar(5, 255, 255), mHSVThreshed);
    Imgproc.cvtColor(mHSVThreshed, mRgba, Imgproc.COLOR_GRAY2BGR, 0);
    Imgproc.cvtColor(mRgba, mRgba2, Imgproc.COLOR_BGR2RGBA, 0);
    Bitmap bmp = Bitmap.createBitmap(mRgba2.cols(), mRgba2.rows(), Bitmap.Config.ARGB_8888);


    if (Utils.matToBitmap(mRgba2, bmp))...

首先,mat 是二进制 0 或 255,因此到灰度级的变换更加“自然”。其次,从HSV到RGB的转换实际上是HSV-BGR!!。最后一件事是预览需要 RGBA 位图。

就是这样。希望其他人可以从这篇文章中受益。沙洛姆!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ANDROID - 使用 openCV 进行颜色检测 - 如何? 的相关文章

随机推荐

  • 有没有办法在 Java 中生成 8.3 或“短”(Windows) 版本的文件名?

    在我们的应用程序中 我们允许用户打开文件和目录 Java 6 为我们提供了 java awt Desktop getDesktop open file 效果很好 不过 由于我们需要保证Java 5的兼容性 所以我们还实现了一个打开文件的方法
  • PIVOT 不起作用“)”附近的语法不正确

    T SQL代码 SELECT iCarrierInvoiceDetailsID 1 2 3 FROM GroundEDI dbo tblCarrierInvoiceDetails PIVOT MAX dTotalCharge FOR iCa
  • /proc/modules 中模块实例的含义

    我用过cat proc modules列出模块详细信息 下面的模块显示有 4 个实例 poe isr 3046 4 Live 0xc37e1000 O 这是什么意思 我如何查看这些实例的使用情况 下一个模块显示为 0 个实例并且处于活动状态
  • ionic 2 在通知中显示文件下载进度

    我想显示如图所示的下载通知 我正在使用 ionic 2 Cordova 文件传输 Cordova 文件传输将下载文件 但不会在通知中心显示进度条 使用时会显示进度条下载管理器 https developer android com refe
  • 是否有从文件中读取前 n 行的实用方法?

    我搜索了以下流行的库 Guava 文件 readLines nio 文件 readFirstLine or 文件 readAllLines 阿帕奇共享区 FileUtils readLines 所有方法将整个文件作为字符串集合读入内存 但这
  • “空条件运算符短路”是什么意思?

    未来访客请注意 这个问题是基于错误的重现代码 这 操作员确实短路了 您现在可以关闭此浏览器选项卡 网络上有许多来源声称空条件运算符 短路 例如http www informit com articles article aspx p 242
  • “npm-run-all”未被识别为内部或外部命令

    我在 Windows 计算机上安装了 npm run all 并配置了环境变量 可能需要也可能不需要 但收到错误 npm run all 不被识别为内部或外部命令 可运行的程序或批处理文件 我正在尝试构建我当前的项目npm run buil
  • Prolog 析取

    考虑这个 Prolog 谓词 silly 1 1 silly 1 2 查询时 输出答案有两种状态 true 和 false 无论如何 有没有办法要求 Prolog 在析取中遇到 true 语句时立即终止 问题是 无论如何 有没有办法要求 P
  • 如何在按钮上创建计数器?

    我想在该按钮的中心创建文本 SomeText 的按钮 在按钮的右侧创建 0 的按钮 其中 0 是计数器 当我单击此按钮时 Counter 递增 并变为 1 我想知道如何将 textviev 与 按钮的右侧部分 联系起来
  • tcp:为什么只有第二次调用 Socket.Receive(byte[]) 返回数据?

    我的情况很典型 我需要通过 TCP 向服务器发送 请求 并接收响应 socket is connected socket Send CreateRequest byte br new byte VERY BIG BUFFER int cou
  • 使用nodejs对cassandra表上100,000个用户的记录应用更新查询。连接繁忙问题

    我正在使用 cassandra 3 x 和节点 10 13 0 我的工作记忆中有 100 000 个用户的数据 在给定代码中的地图 sortedRowMap 中 我通过迭代用户使用的地图 有 100 000 条记录 来更新所有记录 但它给我
  • 在字嵌入层中使用来自 fasttext 的 OOV 令牌中的子字信息 (keras/tensorflow)

    我有自己的 Fasttext 模型 并用它训练了带有词嵌入层的 keras 分类模型 但是 我想知道如何利用模型的子词信息来处理 OOV 单词 由于词嵌入层通过索引操作来查找词向量 而 OOV 词没有索引 即使 OOV 标记有索引 我如何为
  • MarkDown 源代码中的正则表达式惰性量词和否定类

    我正在浏览MarkDown http daringfireball net projects markdown John Gruber 用 Perl 编写的代码 有一个名为 Detab将制表符转换为空格 同时保留文本的缩进 有问题的代码行是
  • 无法解析模块“./index”

    过去几天 我的代码中一直收到无法解析模块索引的消息 并找到了临时解决方案 但无法找到永久修复 在过去的几天里 我一直收到此错误 并且当我运行 npm start reset cache 时找到了临时解决方案 但是每当我再次运行 react
  • 在 Google Colaboratory 上安装 faiss

    我尝试按照说明进行操作缪斯计划 https github com facebookresearch MUSE 他们需要 PyTorch 和 Faiss PyTorch 易于安装 但我发现安装有问题Faiss https github com
  • Bulma css 与 select2 jquery 插件

    我尝试实施select2 https select2 github io examples html插件使用Bulma http bulma io documentation elements form css框架 但前端看起来很混乱 我使
  • Gradle 编译依赖项未包含在 Jar 中

    我有一个 jar build plugins jar 其中包含一个 gradle 插件 该插件是在 build gradle 中使用此构建的 apply plugin java dependencies compile gradleApi
  • 服务器端 javascript - 经典 asp

    在客户端 JavaScript 中 this 运算符是窗口对象 经典 asp 服务器端 javascript 中的 this 运算符是什么 在下面的代码中 当在经典 ASP 服务器端运行时 this 引用是什么 test function
  • MySQL 版本与发行版号

    键入 mysql version 在 Linux shell 中执行命令 我得到以下信息 mysql Ver 14 12 Distrib 5 0 77 for redhat linux gnu i686 using readline 5 1
  • ANDROID - 使用 openCV 进行颜色检测 - 如何?

    我的目标是使用 HSV 颜色空间以仅显示黄色对象的方式显示脱粒图像 我使用这个代码 基于 openCV 2 3 1 android 示例给出的代码 protected Bitmap processFrame VideoCapture cap