当前位置: 首页 > 知识库问答 >
问题:

opencv检测表(birdview)上的所有通用对象形状

万阳嘉
2023-03-14

我想检测平桌上的各种物体形状。桌子的表面颜色可以是灰色、白色或黑色。

对象可以是任何形状,也可以有不同的颜色。

解决这个问题的有效方法是什么?

我曾经尝试过:

1.)转换为灰度,双边滤波,精明的边缘,然后使用findContour,也尝试了自适应阈值。

2.)OpenCV SimpleBloDetector

原始图片

轮廓

水滴探测器

共有3个答案

孔君浩
2023-03-14

如果对象的颜色变化很大,则可以使用HSV颜色空间的色调通道。

image = cv2.imread('image.png',cv2.IMREAD_UNCHANGED)

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
hsv = cv2.split(hsv)
gray = hsv[0]

ret,binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)

contours = cv2.findContours(gray, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]

cv2.drawContours(image, contours, -1, (0,0,255),2)
农飞星
2023-03-14

一个选项可以是分水岭算法。在链接的例子中,硬币是用这种算法检测的。

宦炜
2023-03-14

如果在任何情况下颜色是一个问题,您可以使用自适应阈值找到表上对象的边缘。

代码:

img = cv2.imread(r'C:\Users\Jackson\Desktop\table.png', 1)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.medianBlur(gray, 5)

ret,th1 = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)

adaptive_threshold = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\
            cv2.THRESH_BINARY,11,2)

img2 = img.copy()

_, contours, _ = cv2.findContours(cv2.threshold(th3, 0, 255, cv2.THRESH_BINARY_INV)[1], cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img2, contours, -1, (0, 255, 0), 2)

结果:

cv2.imshow('adaptive_threshold', adaptive_threshold)
cv2.imshow('img2', img2)
 类似资料:
  • 本文向大家介绍opencv实现矩形检测,包括了opencv实现矩形检测的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了opencv实现矩形检测的具体代码,供大家参考,具体内容如下 效果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍使用OpenCV检测图像中的矩形,包括了使用OpenCV检测图像中的矩形的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了OpenCV检测图像中矩形的具体代码,供大家参考,具体内容如下 前言 1.OpenCV没有内置的矩形检测的函数,如果想检测矩形,要自己去实现。 2.我这里使用的OpenCV版本是3.30. 矩形检测 1.得到原始图像之后,代码处理的步骤是: (1)滤波

  • 我已经成功地将镶嵌到我的Android应用程序中,它可以读取我捕获的任何图像,但准确性非常低。但大多数时候,我在捕获后没有得到正确的文本,因为感兴趣区域周围的一些文本也会被捕获。 我想阅读的只是来自矩形区域的所有文本,准确,没有捕捉矩形的边缘。我已经做了一些研究,并在stackoverflow上发布了两次,但仍然没有得到满意的结果! 以下是我发的2个帖子: https://stackoverflo

  • 我从网络摄像头中添加了目标检测代码,当我运行此代码时,它会显示检测2-5秒,然后在imshow窗口中显示未响应。 注: > 我用的是cv2。等待键(1),cv2。waitKey(0)也是,结果相同。 我正在使用tensorflow gpu,它检测到我的gpu:1050ti。 但是OpenCV使用CPU来显示图像。 更新部分: [已解决]我刚刚创建了新的conda环境并安装了tensorflow版本

  • 问题内容: 我在测试应用程序中成功实现了OpenCV平方检测示例,但是现在需要过滤输出,因为它很乱-还是我的代码错误? 我对减少偏斜(如那样)和进一步处理的四个角落很感兴趣…… 码: 编辑17/08/2012: 要在图像上绘制检测到的正方形,请使用以下代码: 问题答案: 这是反复出现的主题,由于我找不到相关的实现,因此决定接受挑战。 我对OpenCV中存在的squares演示进行了一些修改,下面生

  • 我目前正在学习C#和XNA,我在让碰撞检测正常工作方面遇到了一些问题。当敌人物体相交时,我希望我的玩家消失。 下面显示了我在Obj类中的代码 我正在循环查看objList中的每个项目,看它们是否相交。在这种情况下,如果敌人与我的玩家相交,我希望玩家消失,但这并没有发生。 此代码来自我的Player类 如果它与敌人相交,它应该消失,但这似乎没有发生。