繁体   English   中英

在嘈杂的图像上查找对象的位置

Find positions of objects on the noisy image

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一堆图像,我需要确定十字的位置,以进一步变换图像和对齐过程。 问题在于图像非常嘈杂,而我对计算机视觉的所有这些东西都是陌生的。 通常,我正在尝试通过opencv和python解决任务。 我已经尝试了opencv库教程中描述的几种方法,但是没有得到合适的结果。

考虑: 带有四个十字的灰度图像 我需要确定十字中心的确切位置(我可以手工完成像素精度)。 我通过findContours函数获得的最佳结果。 我已经采用了本教程中的代码,并且得到了:

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
import random

random.seed(42)

img = cv.imread("sample.png")
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
img_gray = cv.blur(img_gray, (3,3))

threshold = 150

dst = cv.Canny(img_gray, threshold, threshold * 2)
_, contours, hierarchy = cv.findContours(dst, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)

result = np.zeros((dst.shape[0], dst.shape[1], 3), dtype=np.uint8)
for i in range(len(contours)):
    color = (random.randint(0, 256), random.randint(0, 256), random.randint(0, 256))
    cv.drawContours(result, contours, i, color, 2, cv.LINE_8, hierarchy, 0)

cv.imwrite("result.png", result)

fig, ax = plt.subplots()
fig.set_size_inches(10, 10);
ax.imshow(result, interpolation='none', cmap='gray');

结果是: 找到具有几个轮廓的图像 现在,我对以下步骤感到困惑。 如何定义哪个轮廓是交叉的,哪个不是? 如何处理由多个轮廓组成的十字架?

任何帮助都非常感谢!

1 个回复

一种简单的确定交叉点和不交叉点的方法是,在每个轮廓上创建一个绑定框x,y,w,h = cv2.boundingRect(cnt)并选择具有h(高度)和w(重量)大于您提供的阈值。 如果您观察到图像上的噪点与十字架一样大。

我还举例说明了我将如何解决这一任务。 您可以尝试通过执行直方图均衡化,然后使用OTSU阈值进行阈值化并对阈值进行开放(侵蚀然后进行扩张)来对图像进行去噪。 然后,您可以过滤出轮廓的高度和权重的十字,然后计算上述标准中轮廓的每个边界框的中点。 希望能有所帮助。 干杯!

例:

import cv2
import numpy as np

img = cv2.imread('croses.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
equ = cv2.equalizeHist(gray)
_, thresh = cv2.threshold(equ,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
kernel = np.ones((2,2),np.uint8)
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2)
_, contours, hierarchy = cv2.findContours(opening,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

for cnt in contours:
    x,y,w,h = cv2.boundingRect(cnt)
    if w > 40 and h > 40:
        cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
        cv2.circle(img,(int(x+(w/2)), int(y+(h/2))),3,(0,0,255),-1)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

在此处输入图片说明

1 查找对象中的位置

我正在使用OpenCV,可以从名片中的图像中找到对象。 我需要提取特定位置(电子邮件地址,全名)。 我尝试使用形态学运算和cv2.findContours()函数来查找特定位置,但是由于轮廓大小,光照条件,它无法提供理想的结果。 我有: 具有相同设计的始终相同的对象 ...

2 在图像中查找对象

如何在图像中找到车牌? 我本来想寻找印版的颜色,但是当图像中有另一种颜色相同的东西出现问题。 ...

3 iOS:根据对象在屏幕上的位置查找对象?

有没有一种方法可以根据它们在屏幕上的位置来检索一个对象/一个对象(即UILabel , UIButton , UIView等)? 例如,如何确定在(100,100)点上方是什么元素? 我问的原因是因为我想访问位于特定点的最上面的对象的backgroundColor属性? ...

4 查找对象在画布中的位置

我将图像从工具栏拖放到画布上。用户可以从工具栏多次拖放同一图像。用户还可以双击删除特定对象,如下面的链接所示。 http://jsfiddle.net/gkefk/26/ 我想记录这些对象在页面加载时的位置以及在画布中移动它们之后的位置。为此,我添加了一个事件侦听器和一个函数,该函数 ...

5 在 postgres jsonb 数组中查找对象的位置

我在表的 jsonb value列中有一个如下所示的对象数组: 我的目标是根据它们的 id 和版本从该数组中删除某些对象,如下所示: 但是, 1不应该是硬编码的,而应该等于数组中与我正在寻找的 id 和版本匹配的对象的位置(在本例中为"id": "cd92e346-6b04-3456-050 ...

6 在多维列表中查找对象的位置

我有一个类型为List<List<CustomObject>>的数据结构。 我希望能够在我的数据结构中找到特定CustomObject的位置。 输出将显示例如1,0的索引,这意味着CustomObject是第一个列表项中的第0个元素。 我已经想到了以下实现方法: ...

7 在列表中查找 object 的 position 编号

我有一个清单如下: 该列表仅包含一个 object 与TRUE ,所有其他都是TRUE和FALSE的混合。 我想计算出TRUE only object 的 position 编号,在这种情况下答案是2 。 这听起来很简单,但到目前为止我失败了。 有什么想法可以解决这个问题吗? ...

9 在PDF iOS中查找对象的位置

我有一个结构如下的PDF: 用户在应用程序中填写此问题栏,完成后需要打印带有选定圆圈的“ A,B,C,D,E,F,G”的PDF问题栏。 我可以加载PDF并为其添加注释,但是问题是我不知道如何找到“ A,B,C,D,E,F,G”的坐标来在其周围绘制圆。 无论如何,以编程方式解决这个 ...

10 C ++ / OpenCV在图像上查找对象

我必须在图像上找到几个对象。 例如,在棋盘上找到所有黑色的棋子: 如何使用OpenCV实现呢? 我考虑了cv :: matchTemplate,但是我不确定在不同的pawn背景下如何进行。 我也不确定是否可以通过这种方式轻松获得所有匹配项。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM