如何使用 OpenCv 查找图像上的角点

2024-01-09

我正在尝试找到图像上的角点,我不需要轮廓,只需要 4 个角点。我将使用 4 个角来改变视角。

我正在使用 Opencv,但我需要知道找到角点的步骤以及我将使用什么函数。

My images will be like this:(without red points, I will paint the points after) enter image description here

EDITED:

按照建议的步骤后,编写代码:(注意:我没有使用纯 OpenCv,我使用的是 javaCV,但逻辑是相同的)。

// Load two images and allocate other structures (I´m using other image)
    IplImage colored = cvLoadImage(
            "res/scanteste.jpg",
            CV_LOAD_IMAGE_UNCHANGED);
    IplImage gray = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);
    IplImage smooth = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);

    //Step 1 - Convert from RGB to grayscale (cvCvtColor)
    cvCvtColor(colored, gray, CV_RGB2GRAY);
    //2 Smooth (cvSmooth)
    cvSmooth( gray, smooth, CV_BLUR, 9, 9, 2, 2); 
    //3 - cvThreshold  - What values?
    cvThreshold(gray,gray, 155, 255, CV_THRESH_BINARY);
    //4 - Detect edges (cvCanny) -What values?
    int N = 7;
    int aperature_size = N;
    double lowThresh = 20;
    double highThresh = 40;     
    cvCanny( gray, gray, lowThresh*N*N, highThresh*N*N, aperature_size );   
    //5 - Find contours (cvFindContours)
    int total = 0;
    CvSeq contour2 = new CvSeq(null);
    CvMemStorage storage2 = cvCreateMemStorage(0);
    CvMemStorage storageHull = cvCreateMemStorage(0);
    total = cvFindContours(gray, storage2, contour2, Loader.sizeof(CvContour.class), CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
    if(total > 1){
          while (contour2 != null && !contour2.isNull()) {
              if (contour2.elem_size() > 0) {
                //6 - Approximate contours with linear features (cvApproxPoly)
                  CvSeq points = cvApproxPoly(contour2,Loader.sizeof(CvContour.class), storage2, CV_POLY_APPROX_DP,cvContourPerimeter(contour2)*0.005, 0);
                  cvDrawContours(gray, points,CvScalar.BLUE, CvScalar.BLUE, -1, 1, CV_AA);

              }
              contour2 = contour2.h_next();
          }

    } 

所以,我想找到角点,但我不知道如何使用 cvCornerHarris 等角点函数。


首先,查看 OpenCV 发行版中的 /samples/c/squares.c。这个示例提供了一个方形检测器,对于如何检测类似角的特征来说,它应该是一个很好的开始。然后,看一下 OpenCV 的面向特征的函数,例如 cvCornerHarris() 和 cvGoodFeaturesToTrack()。

以上方法都可以返回many类似角的特征 - 大多数都不是您正在寻找的“真正的角”。在我的应用程序中,我必须检测已旋转或倾斜(由于透视)的正方形。我的检测管道包括:

  1. 从 RGB 转换为灰度 (cvCvtColor)
  2. 平滑(cvSmooth)
  3. 阈值(cv阈值)
  4. 检测边缘(cvCanny)
  5. 查找轮廓(cvFindContours)
  6. 具有线性特征的近似轮廓(cvApproxPoly)
  7. 找到“矩形”,这些结构具有:具有 4 个点的多边形轮廓、具有足够的面积、相邻边缘约为 90 度、“相对”顶点之间的距离足够大等。

步骤 7 是必要的,因为稍微有噪声的图像可能会产生许多在多边形化后显示为矩形的结构。在我的应用程序中,我还必须处理出现在所需正方形内或与所需正方形重叠的类似正方形的结构。我发现轮廓的面积属性和重心有助于辨别正确的矩形。

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

如何使用 OpenCv 查找图像上的角点 的相关文章

  • 来自连接到远程机器的相机的 Opencv 流

    我正在用 python 开发一个 wx 应用程序 用于流式传输和显示来自两个不同网络摄像头的视频 这工作正常 但现在我需要在不同的场景中执行此操作 其中两个摄像头连接在通过网络连接的 Windows 上运行的单独计算机中 我的应用程序将在机
  • opencv 2.3.* 读取不工作

    我无法让 imread 工作 与这个人有同样的问题 OpenCV imwrite 2 2 在 Windows 7 上导致异常 并显示消息 OpenCV 错误 未指定错误 无法找到指定扩展名的编写器 https stackoverflow c
  • BASH 脚本编译多个 C++ 文件 - OpenCV

    请参见在C 和OpenCV中调用其他文件中的函数 https stackoverflow com questions 24442836 call functions in other files in c and opencv 对于最初的问
  • 如何在 OpenCV 中从 YUV 文件读取帧?

    如何在 OpenCV 中从 YUV 文件读取帧 我编写了一个非常简单的 python 代码来从二进制文件读取 YUV NV21 流 import cv2 import numpy as np class VideoCaptureYUV de
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 仅获取图像中的外部轮廓

    我有这段代码 可以在图像中绘制轮廓 但我只需要外部轮廓 import cv2 import numpy as np camino C Users Usuario Documents Deteccion de Objetos 123 jpg
  • 识别相似图像的库

    我想确定 2 张图像的相似程度 图像可能已被缩放 裁剪等 因此简单的像素比较将不起作用 我环顾四周 有很多关于这个主题的学术论文 但他们没有发布他们的代码 那么 您知道有一个可以比较图像的已发布库 适用于 Linux 和 Windows 吗
  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • setImageCompressionQuality 与 setCompressionQuality 之间有什么区别 - Imagick

    我在Imagick中找到了两种设置图像压缩质量的方法 A 设置图像压缩质量 B 设置压缩质量 所以我想知道哪一个是最好的以及为什么在以下条件下 我读到了setCompressionQuality方法仅适用于新图像 我正在尝试压缩文件 jpe
  • 如何去除给定图像中的噪声,使 ocr 输出完美?

    我已经对这个孟加拉文本图像进行了大津阈值处理 并使用 tesseract 进行 OCR 但输出非常糟糕 我应该应用什么预处理来消除噪音 我也想校正图像 因为它有轻微的倾斜 我的代码如下 import tesserocr from PIL i
  • OpenCV IP 相机应用程序崩溃 [h264 @ 0xxxxx] 访问单元中缺少图片

    我在 cpp 中有一个 opencv 应用程序 它使用 opencv 的简单结构捕获视频流并将其保存到视频文件中 它与我的网络摄像头完美配合 但是 当我运行它从 IP 摄像机捕获流时 它可能会在大约十秒后崩溃 我的编译命令是 g O3 IP
  • OpenCV 错误:connectedComponents_sub1 中断言失败 (L.channels() == 1 && I.channels() == 1) [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 OpenCV python 中遇到以下错误 并用 google 搜索了很多 但无法解决 如果有人能为我提供一些线索
  • 从包含带边框的表格的图像中提取表格结构

    我正在尝试提取下表中的单元格位置 应用自适应阈值处理后 我能够获得细胞位置周围的轮廓 并且 HoughLines 获得垂直和水平结构元素 这是我的代码 img cv2 imread os path join img path file im
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 使用 ruby​​ 调整动画 GIF 图像的大小?

    我正在尝试将 GIF 图像调整为不同的尺寸 我在 ruby 中使用 RMagick 库 但对于某些 gif 图像 即使我缩小 GIF 的大小 文件大小似乎也会增加 我正在以相同的纵横比调整图像图像的大小 这是我的代码 require rma
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • Windows 上 Sublime Text 2 的键盘列选择

    我一直在尝试通过 Windows 上的键盘绑定来选择列 The 默认 Windows sublime 键盘映射说 keys ctrl alt up command select lines args forward false keys c
  • 为什么 IEnumerable 会丢失更新的数据?

    你能向我解释一下为什么执行以下代码后Selected属性未更新为true The ListItem使用的类型来自System Web UI WebControls命名空间并且是一个类 不是结构 我相信FirstOrDefault函数返回对实
  • Android:以编程方式将 apk 复制到 /system/app

    我正在尝试从我的 java 代码安装系统应用程序 但到目前为止 我还没有取得任何成功 以下是我到目前为止所做的 我的设备已植根 我的 安装程序 应用程序作为系统应用程序安装 手动将其复制到 system app 我已经使用平台密钥签署了安装
  • mediaelement.js - RTMP 支持音频流?

    目前是否支持使用本机 HTML5 或 Flash 回退与 MediaElement 通过 RTMP 流式传输音频 我看到视频标签 data mejsoptions 属性中使用 flashStreamer 选项看起来像是对视频的支持 我知道你
  • 使用 Mockito-core 创建最终类的模拟?

    I 在github上找到 https github com relayr android sdk blob master tests src androidTest java io relayr ble service OnBoarding
  • GWT - 具有简单寻呼机问题的单元格

    单元格表分页行为异常 检查 GWT 的示例http gwt google com samples Showcase Showcase html CwCellTable http gwt google com samples Showcase
  • 如何在表单寄存器中添加一些文本字段(laravel 生成器 infyom)?

    我在这里阅读了教程 http labs infyom com laravelgenerator docs 5 3 installation http labs infyom com laravelgenerator docs 5 3 ins
  • 为什么视频观看速度这么慢?

    我在我的应用程序中放置了一个视频视图 它工作正常 但是当您打开页面时 它需要永远加载 缓冲 无论如何我可以解决这个问题吗 我的意思是这是一个3秒视频 加载时间应该不会太长 正确的 code package jslsoftware co nr
  • 是否可以为命名类型/结构定义相等性?

    读完一篇后相关问题 https stackoverflow com questions 20297503 slice as a key in map关于在映射中使用切片 我对 Go 中的相等性感到好奇 我知道可以覆盖equalsJava 的
  • 检测亮图像和暗图像

    我从 stackoverflow 答案中得到了这段代码来检测明亮和黑暗的图像 问题是它不起作用 我不知道为什么 例如如果我打电话 IsDark bitmap 40 0 9 this always sees the image as brig
  • 我可以在 C++ 中嵌套 try-catch 块吗?

    我可以嵌套 try catch 块吗 例如 void f try Some code try Some code catch ExceptionA a Some specific exception handling Some code c
  • 使用网络摄像头、OpenCV 和 Python 跟踪眼瞳位置

    我正在尝试建造一个可以通过基本的眼球运动来控制的机器人 我将网络摄像头对准我的脸 根据我瞳孔的位置 机器人会以某种方式移动 如果瞳孔位于眼睛的上 下 左 右角 机器人将分别向前 向后 向左 向右移动 我最初的计划是使用眼哈尔级联来找到我的左
  • 如何对多个wordpress自定义字段值进行排序?

    显示按 价格 自定义字段排序的 产品 类型的帖子 query new WP Query array post type gt product orderby gt meta value meta key gt price 如果还想按 尺寸
  • git stash save 和 git stash push 有什么区别?

    我应该什么时候使用git stash save代替git stash push反之亦然 git stash save接受一个非选项参数 隐藏消息 git stash push接受带有选项的消息 m并接受要存储的文件列表作为参数
  • 如何将用户输入转换为列表[重复]

    这个问题在这里已经有答案了 我想编写一个Python程序 要求用户输入7个数字 该输入应转换为列表并首先显示单个数字 然后显示整个列表 所以我的想法是从 for 循环开始 for a in range 1 8 number int inpu
  • Mobile Safari 文本输入宽度错误?

    看看这些屏幕截图 https i stack imgur com 1TFuj png https i stack imgur com 1TFuj png https i stack imgur com 3fukT png https i s
  • 设置 » JavaScript 的 document.title 中的 HTML 实体?

    我正在设置document title使用 JavaScript 但我找不到提供的方法 raquo 而不显示为文字文本 这是我的代码 document title Home raquo site com 如果我使用 在文档的标题标签中 它工
  • Rails 在控制器中异步执行任务

    当我的路线中有一条路线时 我需要执行三项任务Controller叫做 现在我的代码看起来像这样 缩写 def set quotas TaskOne new ex TaskTwo new ex TaskThree new ex quotas
  • 如何将svn分支和标签导入git-svn?

    我有一个必须提交的中央 SVN 存储库 但我对 git 充满热情 就像我认识的任何其他开发人员一样 此案众所周知 然后我读到了 git svn 并尝试了一下 由于我不需要完整的历史记录 只需要两个月左右的时间 我确实喜欢这样 git svn
  • 如何使用 OpenCv 查找图像上的角点

    我正在尝试找到图像上的角点 我不需要轮廓 只需要 4 个角点 我将使用 4 个角来改变视角 我正在使用 Opencv 但我需要知道找到角点的步骤以及我将使用什么函数 My images will be like this without r