【问题标题】:How to find the extreme corner point in image ?如何找到图像中的极端角点?
【发布时间】:2020-02-12 18:06:20
【问题描述】:

形成上面的源图像(源图像1、图像2),我想找到极端角点,得到目标图像1、图像2等我画的红色圆圈点。

其实我研究的是Harris、Shi Tomasi算法,但并没有那么极端。

其实我用java代码试过goodFeaturesTotrack,喜欢:

goodFeaturesToTrack(basedImg,corners,10,0.2,10,maskMat,3,false,0.04);  for (int j=0;j<cornerArray.length;j++){
                Point curP = cornerArray[j];
                Imgproc.circle(retImg,curP,3,new Scalar(255,0,0),-1);
            }

结果图片如下:

虽然可以找到一些蓝色的特征点,但没有我展示的目标image1、image2那么极端。

那么你有什么好主意来找到特殊字符的角点吗?

【问题讨论】:

  • 在我看来,您的问题/任务没有充分定义。您如何描述“极端拐点”? Stack Overflow 是针对实际的编码问题,而不是外包底层问题的解决。请提供“极端拐点”的正确描述,并展示您迄今为止尝试过的任何方法(和代码)。
  • 从我的目的地image1、image2,你可以看到我画的角点。就是极端角点的例子
  • 我会从approxPolyDP开始。

标签: opencv tensorflow machine-learning deep-learning computer-vision


【解决方案1】:

您可以使用cv2.goodFeaturesToTrack() 进行角点检测。该函数有四个参数

corners = cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance)
  • image - 输入 8 位或浮点 32 位灰度单通道图像
  • maxCorners - 返回的最大角点数
  • qualityLevel - 最低可接受的拐角质量水平介于 0-1 之间。所有低于质量水平的角都被拒绝
  • minDistance - 拐角之间可能的最小欧几里得距离

import cv2

image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

corners = cv2.goodFeaturesToTrack(gray,10,0.2,20)

for corner in corners:
    x,y = corner.ravel()
    cv2.circle(image,(x,y),5,(36,255,12),-1)

cv2.imshow('image', image)
cv2.waitKey()

【讨论】:

  • goodFeaturesToTrack我试过了,但不是那么极端。
  • 您能详细说明一下您所说的极端是什么意思吗?
  • 找到我在目标image1、image2上绘制的角点。
【解决方案2】:

看起来alphashape 可以为您提供所需的内容,如果您将二进制图像像素视为要包围的点的集合。

他们的文档中的示例:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2013-06-08
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多