在图像中找到对象坐标的最简单方法是什么?

时间:2018-11-23 21:09:31

标签: image api object coordinates analysis

想象一下,在一种颜色的背景上具有不同颜色的圆圈的图像。找到圆心坐标的最简单方法(当然是以编程方式)是什么?

2 个答案:

答案 0 :(得分:1)

ImageMagick 是一种非常简单的方法,它免费提供并安装在大多数Linux发行版中,并且可用于macOS和Windows-无需编程!

让我们从这张图片开始:

enter image description here

现在,您只需在终端或命令提示符中运行它即可

magick input.png -define connected-components:verbose=true -connected-components 8 -auto-level output.png

输出

Objects (id: bounding-box centroid area mean-color):
  0: 600x300+0+0 297.4,145.3 128391 srgb(0,0,0)          <--- black background
  2: 181x181+110+60 200.0,150.0 25741 srgb(0,0,255)      <--- blue circle
  3: 161x161+420+120 500.0,200.0 20353 srgb(255,0,255)   <--- magenta circle
  1: 81x81+10+10 50.0,50.0 5166 srgb(0,255,0)            <--- green circle
  4: 21x21+390+190 400.0,200.0 349 srgb(255,255,0).      <--- yellow circle

我在<---之后添加了以上评论。

看看蓝色圆圈,您可以看到它的颜色是srgb(0,0,255),它是蓝色的,尺寸为181x181像素-半径为90像素。包含矩形的左上角在[110,60]处,因此中心在[200,150]处,它与为质心给出的200.00,150.00相匹配。

同样,看着黄色圆圈,它的颜色是srgb(255,255,0),它是黄色。其高度和宽度为21个像素,这意味着半径为10。所包含的正方形的左上角位于[390,190],这意味着中心位于[400,200],与给出的质心匹配400.0,200.0

答案 1 :(得分:0)

我也想在Python中使用OpenCV进行此操作,并使用与其他答案相同的起始图像。

enter image description here

代码如下:

#!/usr/bin/env python3

import numpy as np
import cv2

# Load image
im = cv2.imread('start.png')

# Convert to grayscale and threshold
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,1,255,0)

# Find contours, draw on image and save
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(im, contours, -1, (0,255,0), 3)
cv2.imwrite('result.png',im)

# Show user what we found
for cnt in contours:
   (x,y),radius = cv2.minEnclosingCircle(cnt)
   center = (int(x),int(y))
   radius = int(radius)
   print('Contour: centre {},{}, radius {}'.format(x,y,radius))

在终端上显示以下内容:

Contour: centre 400.0,200.0, radius 10
Contour: centre 500.0,200.0, radius 80
Contour: centre 200.0,150.0, radius 90
Contour: centre 50.0,50.0, radius 40

这是结果图像:

enter image description here