Image 什么';在图像中找到物体坐标的最简单方法是什么?

Image 什么';在图像中找到物体坐标的最简单方法是什么?,image,api,object,coordinates,analysis,Image,Api,Object,Coordinates,Analysis,想象一下,在一种颜色的背景上有一个不同颜色的圆圈的图像。找到圆中心坐标的最简单方法是什么(当然是通过编程)?使用ImageMagick有一种非常简单的方法,它是免费的,安装在大多数Linux发行版上,适用于macOS和Windows-无需编程 让我们从这张图片开始: 现在,您只需在终端或命令提示符下运行: magick input.png -define connected-components:verbose=true -connected-components 8 -auto-level

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

使用ImageMagick有一种非常简单的方法,它是免费的,安装在大多数Linux发行版上,适用于macOS和Windows-无需编程

让我们从这张图片开始:

现在,您只需在终端或命令提示符下运行:

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
对象(id:边界框质心区域平均颜色):

0:600x300+0+0297.4145.3 128391 srgb(0,0,0)我也想用Python和OpenCV一起使用,使用与我的另一个答案相同的起始图像

代码如下所示:

#!/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
作为结果图像:


圆圈是否相互重叠?它们是同心的吗?您的图像是JPEG还是PNG或其他格式?你使用什么操作系统?你能用什么语言编程?你试过什么?每个圆圈都只有一种纯色吗?圆是否完全包含在图像中,或者某些部分是否落在背景之外?它们既不重叠也不同心。图像的格式可以是任何有助于处理的内容。Windows和Linux。只有C和一点点Java,但我现在正在练习Python。我是一个初学者,正在做一个我提出的项目,所以除了谷歌搜索外,我什么也没试过。这些圆圈是纯色的,它们永远不会落在图像之外。@fmw42这就是我写的,不是吗?这就是我的意思!谢谢。马克,当我看到你问同样的问题时,我删除了我的评论。但是为了便于操作,您可以演示如何只提取颜色和质心,而不提取黑色背景作为答案的补充。这实际上非常详细而且有用!我非常感谢你的回答,非常感谢!