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

基于形状轮廓检测的形状匹配

秦俊发
2023-03-14
import numpy as np
import cv2

temp = cv2.imread('./image/star.jpg')
ret, temp_thre = cv2.threshold(temp, 100, 255,0)

cv2.imshow("store gray iamge",temp_thre)
cv2.waitKey(0)

_, contours, hierarchy = cv2.findContours(temp_thre, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
temp_cont = sorted(contours, key=cv2.contourArea, reverse= True)

new_temp_cont = temp_cont[1]

tar = cv2.imread('./image/store.jpg')
tar_gray = cv2.cvtColor(tar, cv2.COLOR_BGR2GRAY)
tar_thr = cv2.threshold(tar_gray, 127, 255, 0)
_, contours, hierarchy = cv2.findContours(tar_thr, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)

for c in contours:
    match = cv2.matchShapes(new_temp_cont, c, 1, 0.0)
    print(match)
    if match < 0.15:
        closest_match = c
    else:
        closest_match = []
cv2.drawContours(tar, [closest_match], -1, (0,255,0),2)
cv2.imshow("output", tar)
cv2.waitKey(0)
cv2.destroyAllWindows()

这是我的代码,但我仍然无法纠正它。请在这方面帮助我。

这里的错误是:

C:\python36\python.exe C:/Users/shahid/PycharmProjects/untitled/segmentation_object_detection.py
OpenCV Error: Unsupported format or combination of formats ([Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only) in cvStartFindContours_Impl, file C:\projects\opencv-python\opencv\modules\imgproc\src\contours.cpp, line 199
Traceback (most recent call last):
  File "C:/Users/shahid/PycharmProjects/untitled/segmentation_object_detection.py", line 10, in <module>
    _, contours, hierarchy = cv2.findContours(temp_thre, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)`enter code here`
cv2.error: C:\projects\opencv-python\opencv\modules\imgproc\src\contours.cpp:199: error: (-210) [Start]FindContours supports only CV_8UC1 images when mode != CV_RETR_FLOODFILL otherwise supports CV_32SC1 images only in function cvStartFindContours_Impl

共有1个答案

公良飞尘
2023-03-14

您的图像中有太多的通道,对于findContour来说,这需要一个单通道8位图像。以下是如何获取源图像的信息:

temp = cv2.imread('./image/star.jpg')
print('shape={}'.format(temp.shape))

如果形状中有2个元素,则图像为单通道。如果为3,则第三个元素是通道数。

您需要将图像转换为单通道8位图像,例如:

gray = cv2.cvtColor(temp, cv2.COLOR_BGR2GRAY)
 类似资料:
  • 我想做一个游戏,有每一个水平加载从一个图像。我想在Photoshop中把整个关卡画出来,然后把它设置为背景并允许玩家走过去。我想要另一个看不见的图像超过顶部,这将是黑色的所有地方,我想要碰撞。 我不想使用瓷砖的原因,这是更容易与矩形碰撞和诸如此类,因为将有复杂的角,并不是所有将是矩形。 这是一个好主意吗?有没有可能轻松做到?这将是一个巨大的CPU拥有者还是有更好的方法做到这一点?

  • 主要内容:JOGL 原始三角形 示例,JOGL 原始四边形 示例在前面的例子中,我们已经知道在 JOGL 中可以借助 GL_LINES 参数绘制任何类型的形状。但除此之外,JOGL 还包含各种其他参数,我们可以通过这些参数直接(即以更简单的方式)绘制特定的形状,例如三角形、四边形、多边形等。 JOGL 原始三角形 示例 在这个例子中,我们将看到如何在原始三角形参数(GL_TRIANGLES)的帮助下创建一个三角形。 输出结果如下: JOGL 原始四边形 示例

  • 我知道如何检查一个圆是否要与一个正方形相撞,我知道如何检测一个正方形是否要与一个正方形相撞,但是如果一个多边形要与一个正方形相撞,我该如何检测呢? 或者更好的是,当一个多边形将要与另一个多边形碰撞时。 或者更好的是,当由非直线组成的形状与另一个类似的形状(多边形或圆形/矩形)发生冲突时 有什么方法可以得到一个图形可能占用的像素和另一个图形可能占用的像素,并检查它们是否相同? 我希望有一些解决方案不

  • SVG 有大量的内置图形。例如:轴对齐矩形和圆形。在D3中结合D3的路径数据生成器和SVG的路径(path)元素能更加灵活地绘制图形。 形状生成器,例如d3.svg.arc返回的,既是一个对象又是一个函数。也就是说,你可以像其他函数一样调用形状生成器。形状生成器对象遵循链式语法。 SVG 元素 所有的SVG形状都可以使用transform属性。你可以将转换直接应用在SVG形状上,或者应用在g元素上

  • 主要内容:JOGL 3D 示例在3D物体中,z 轴也与 x 轴和 y 轴同时存在。这些轴表示对象的高度、宽度和深度。因此,它代表了对象的真实视图。 JOGL 3D 示例 在这个例子中,我们正在创建一个简单的 3D 对象。 输出结果为:

  • 我试图通过OpenCV(Python)的图像预处理技术来检测黑白足球。我的想法如下; 处理图像(例如模糊的二进制照片) 找到多个候选足球(例如通过轮廓检测) 调整这些候选者的大小(例如48x48px),并在一个非常简单的神经网络中输入其像素对应的布尔值(0=黑色像素,1=白色像素),然后为每个候选者输出置信度值 确定足球是否存在于照片中,以及球的最可能位置 我一直在寻找合适的候选人。目前,这是我的