Javacv Blob 检测

2024-01-22

我想在我的应用程序中使用一些用 Java 编写的斑点检测,因此使用JavaCV代替OpenCV。我发现很多课程,例如:

SimpleBlobDetector, CvBlobDetector, CvBlob,...但我找不到任何教程或演示/示例代码来在 Java 中使用这些。 谁能告诉我如何使用这些,因为我无法弄清楚并且没有很好的文档。 谢谢!


我现在正在研究同样的问题并有第一个解决方案。 有很多方法,但不幸的是大多数方法都很丑陋且缓慢。 到目前为止,我的主要目标是留在 JavaCV/OpenCV 世界中。

这些链接将我推向了正确的方向:

  1. OpenCV 中的 Blob 提取 https://stackoverflow.com/questions/4641817/blob-extraction-in-opencv
  2. http://voices.yahoo.com/connected-components-using-opencv-5462975.html?cat=15 http://voices.yahoo.com/connected-components-using-opencv-5462975.html?cat=15
  3. http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html#cv-findcontours http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html#cv-findcontours

这是一个完整的演示类,应该向您展示它是如何完成的。 尝试使用带有简单对象和尖角的黑色背景图像,以获得最佳效果。请务必检查上面的第二个链接以了解代码中发生的情况。

import static com.googlecode.javacpp.Loader.sizeof;
import static com.googlecode.javacv.cpp.opencv_core.CV_FILLED;
import static com.googlecode.javacv.cpp.opencv_core.CV_RGB;
import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;
import static com.googlecode.javacv.cpp.opencv_core.cvCreateImage;
import static com.googlecode.javacv.cpp.opencv_core.cvCreateMemStorage;
import static com.googlecode.javacv.cpp.opencv_core.cvDrawContours;
import static com.googlecode.javacv.cpp.opencv_core.cvGetSize;
import static com.googlecode.javacv.cpp.opencv_core.cvPoint;
import static com.googlecode.javacv.cpp.opencv_highgui.cvLoadImage;
import static com.googlecode.javacv.cpp.opencv_highgui.cvSaveImage;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_BGR2GRAY;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_CHAIN_APPROX_SIMPLE;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_RETR_CCOMP;
import static com.googlecode.javacv.cpp.opencv_imgproc.CV_THRESH_BINARY;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvCvtColor;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvFindContours;
import static com.googlecode.javacv.cpp.opencv_imgproc.cvThreshold;

import java.awt.Color;
import java.util.Random;

import com.googlecode.javacv.cpp.opencv_core.CvContour;
import com.googlecode.javacv.cpp.opencv_core.CvMemStorage;
import com.googlecode.javacv.cpp.opencv_core.CvScalar;
import com.googlecode.javacv.cpp.opencv_core.CvSeq;
import com.googlecode.javacv.cpp.opencv_core.IplImage;

/**
 * A demo for blob extraction using only JavaCV / OpenCV
 * @see https://stackoverflow.com/questions/4641817/blob-extraction-in-opencv
 * @see http://voices.yahoo.com/connected-components-using-opencv-5462975.html?cat=15
 * @see http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html#cv-findcontours
 * @author happyburnout
 */

public class JavaCVBlobDemo {

    static String sourcePath = "c:/test/source.jpg";
    static String targetPath = "c:/test/target.jpg";

    public static void main (String args[]){
        IplImage image = cvLoadImage(sourcePath);
        IplImage grayImage = cvCreateImage(cvGetSize(image), IPL_DEPTH_8U, 1);
        cvCvtColor(image, grayImage, CV_BGR2GRAY);

        CvMemStorage mem;
        CvSeq contours = new CvSeq();
        CvSeq ptr = new CvSeq();
        cvThreshold(grayImage, grayImage, 150, 255, CV_THRESH_BINARY);
        mem = cvCreateMemStorage(0);

        cvFindContours(grayImage, mem, contours, sizeof(CvContour.class) , CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

        Random rand = new Random();
        for (ptr = contours; ptr != null; ptr = ptr.h_next()) {
            Color randomColor = new Color(rand.nextFloat(), rand.nextFloat(), rand.nextFloat());
            CvScalar color = CV_RGB( randomColor.getRed(), randomColor.getGreen(), randomColor.getBlue());
            cvDrawContours(image, ptr, color, CV_RGB(0,0,0), -1, CV_FILLED, 8, cvPoint(0,0));
        }
        cvSaveImage(targetPath, image);
    }

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

Javacv Blob 检测 的相关文章

随机推荐

  • Spark工作人员未连接到主设备

    我想创建一个 Spark 独立集群 我可以在同一节点上运行主节点和从节点 但不同节点上的从节点既不显示主节点 URL 也不连接到主节点 我正在运行命令 start slave sh spark spark server 7077 where
  • 像函数一样组合类型构造函数

    我最近遇到了一种情况 我希望能够在实例声明中编写类型构造函数 我本来想这样做 instance SomeClass t SomeClass t gt SomeClass t t where with t t 定义为 t t a t t a
  • 如何在本地主机上测试 Facebook“点赞”按钮?

    可以测试 Like 本地主机上的按钮 并不真地 Facebook 必须抓取您的网站以获取标题 描述和缩略图 如果它位于本地主机上 则无法访问您的站点
  • 角度材料 - 自动完成组件下拉部分不粘在输入字段上

    角度材料的自动完成组件在 MatDialog 组件内未按预期工作 自动完成组件中的 drpodown 部分不会粘贴到输入字段 堆栈闪电战链接 example https stackblitz com edit angular s698hp
  • 我想扫描大量数据(基于范围的查询),在写入数据时我可以做哪些优化以使扫描变得更快?

    I have billion我要扫描的 hbase 行数million一次行 什么是最好的优化技术我可以尽可能快地进行扫描 我们有类似的问题 我们需要通过键扫描数百万行 为此我们使用了映射缩减技术 对此没有标准的解决方案 因此我们编写了一个
  • 列和内嵌中心图像

    我想创建一个 2 个文本列 中间有一个 div 如下所示 我正在使用这段代码 moz column count 2 webkit column count 2 column count 2 当我在 div 类中放置另一个 div 时 它会格
  • WPF 2D 高性能图形

    基本上 我想要 WPF 中的 GDI 类型功能 其中我可以将像素写入位图并通过 WPF 更新和显示该位图 请注意 我需要能够通过响应鼠标移动更新像素来动态设置位图动画 我读到 InteropBitmap 非常适合此目的 因为您可以写入内存中
  • 什么是 LINQ 提供程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • TypeScript 可以在没有定义文件的情况下与 jQuery 交互吗?

    我一直在尝试了解这个新的 TypeScript 东西 并且我对某些事情有点好奇 它仍然可以与现有的 javascript 框架 如 jQuery 一起使用吗 without是否需要包含所有这些接口的定义文件 我一直在尝试手动测试这一点 但到
  • 尝试向 Web 服务发送 SOAP 请求时出现 WS 安全错误

    这是我使用肥皂 UI 发送的 SOAP 请求 但收到一条错误消息 消息不符合配置的策略
  • Puppeteer:Element.hover() 不存在

    我正在使用 puppeteer 从网站上抓取一些图像以及其他一些数据 要更改图像 我需要将鼠标悬停在列表项上 我不断遇到有关 hover 的文档 但没有成功 然而 click 非常适合我的抓取的另一部分 const pptr require
  • Android 关闭键盘

    按下按钮时如何关闭键盘 您想禁用或关闭虚拟键盘吗 如果您只想关闭它 您可以在按钮的单击事件中使用以下代码行 InputMethodManager imm InputMethodManager getSystemService Context
  • UserWarning:pyarrow.open_stream 已弃用,请使用 pyarrow.ipc.open_stream 警告

    我在跑步spark 2 4 2本地通过pyspark用于 NLP 中的 ML 项目 Pipeline 中的部分预处理步骤涉及使用pandas udf功能优化通过pyarrow 每次我使用预处理的 Spark 数据框进行操作时 都会出现以下警
  • 安卓倒计时

    我想在android中写一个倒计时 从3开始计数到0 就像最初3出现然后消失 2出现等等 我进行了很多搜索 但找不到任何好的样本 你能帮我看看我该怎么办吗 使用倒计时器 例如 import android os CountDownTimer
  • 金字塔 1.3 和 Google 应用引擎 1.7

    我设法使 Pyramid 1 2 WSGI 应用程序在 Google App Engine SDK 1 7 上运行 然而 我当前的项目使用了几个新的 Pyramid 1 3 功能 并且我陷入了 WebOb 版本问题 这是错误消息 Versi
  • 无法联系 reCAPTCHA。检查您的连接并重试

    我正在使用react google invisible recaptcha 但当页面加载时它不起作用 它会显示 无法联系 reCAPTCHA 请检查您的连接并重试 之类的警报 即使互联网速度更快 我怎样才能使用invisible reCAP
  • VS2010 中缺少 ws2_32.lib。该怎么办?

    我正在尝试着手 Windows 套接字编程 我知道你必须 include winsock2 h然后链接到ws2 32 lib 问题是我没有ws2 32 lib在我的 Visual Studio 2010 终极版本中 我应该做什么才能让它启动
  • 在Matlab中将导数值保存在ode45中

    我正在模拟一个带有质量弹簧和双摆的 有点奇怪 系统的运动方程 我有一个质量矩阵和函数 f x 并调用 ode45 来求解 M x f x t 我有5个状态变量 q QDot phi phiDot r rDot 删除了 Q 因为没有任何东西依
  • C 中的连续空格删除 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 文本文件包含一堆字符 文件中没有制表
  • Javacv Blob 检测

    我想在我的应用程序中使用一些用 Java 编写的斑点检测 因此使用JavaCV代替OpenCV 我发现很多课程 例如 SimpleBlobDetector CvBlobDetector CvBlob 但我找不到任何教程或演示 示例代码来在