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

如何在低通滤波图像上找到轮廓?

史超英
2023-03-14

我对计算机视觉不熟悉。所以我不知道下面代码的内部实现,因为我无法调试错误。有人能指出下面代码中的错误吗?

该代码使用盒滤波器和边缘检测核矩阵的组合将停车场图像转换为二进制。然后我试图找到轮廓。现在我知道轮廓是在二值图像上找到的,可以用cv2导出。threshold()函数,从过滤器和核矩阵获得的图像不是也是一个二值图像吗?

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

img=cv2.imread('parking spot1.jpg',1)
k3 = np.array(([-1,-1,-1],[-1,8,-1],[-1,-1,-1]))
low_filter = cv2.boxFilter(img, -1, (4,4))
output_low = cv2.filter2D(low_filter, -1, k3)
plt.subplot(2, 2, 1)
plt.imshow(img)
plt.title('Original Image')

plt.subplot(2, 2, 2)
plt.imshow(output_low)
plt.title('matrix1')

plt.show()

img, ret, heirarchy = cv2.findContours(output_low, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

你认为我做错了什么?我非常希望在这个问题上能有一个解释或一个方向。

先谢谢你。

我面临的错误是:

Traceback(最近的调用最后)在 () ----

错误:OpenCV(3.4.3)/io/OpenCV/modules/imgproc/src/contours。cpp:199:错误:(-210:不支持的格式或格式组合)[Start]FindContours在模式下仅支持CV_8UC1图像!=CV_RETR_FLOODFILL仅在函数“cvStartFindContours_Impl”中支持CV_32SC1图像

共有1个答案

陶璞
2023-03-14

请正确阅读过滤文档。很明显,输出与源具有相同的大小和类型。因此,您的输出是三维的,cv2。无法对其应用findContours。你可以像你所说的那样取一个阈值,或者简单地把输出转换成灰度,然后找到轮廓。

编辑

我想我的答案是不清楚说明渠道和图像的深度之间的区别。从滤波器和核矩阵得到的图像不一定是一维或灰度级的。它与输入矩阵的大小相同,这意味着通道的数量也相等。因此,如果您的输入图像是灰度的,那么输出将是一维的。

您可以参考此处了解更多有关通道和深度之间差异的信息。

因此,如果您想要cv2的结果。boxFilter和cv2。滤镜2D在灰度中,只需将原始图像转换为灰度,然后再对其应用过滤。

img = cv2.imread('opencv1.png', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
k3 = np.array(([-1,-1,-1],[-1,8,-1],[-1,-1,-1]))
low_filter = cv2.boxFilter(gray, -1, (4,4))
output_low = cv2.filter2D(low_filter, -1, k3)

您的错误清楚地表明FindContour在模式下只支持CV_8UC1图像!=CV_RETR_FLOODFILL否则支持CV_32SC1图像CV_8UC1CV_32SC1中的C1表示通道数只能是一个。

 类似资料:
  • 本文向大家介绍如何使用Java OpenCV库查找图像轮廓?,包括了如何使用Java OpenCV库查找图像轮廓?的使用技巧和注意事项,需要的朋友参考一下 轮廓线不过是连接沿着特定形状的边界的所有点的线。使用这个你可以- 查找对象的形状。 计算对象的面积。 检测物体。 识别对象。 您可以使用findContours()方法找到图像中各种形状的轮廓,对象。此方法接受以下参数- 二进制图像。 类型为M

  • 本文向大家介绍opencv3/C++图像滤波实现方式,包括了opencv3/C++图像滤波实现方式的使用技巧和注意事项,需要的朋友参考一下 图像滤波在opencv中可以有多种实现形式 自定义滤波 如使用3×3的掩模: 对图像进行处理. 使用函数filter2D()实现 通过像素点操作实现 特定形式滤波 常用的有: blur(src,dst,Size(5,5));均值滤波 GaussianBlur(

  • 问题内容: 我目前正在建立一个基本上相当于搜索引擎和网络漫画画廊之间的交叉点的网站,该画廊侧重于引用来源并给予作者称赞。 我正在尝试找出一种搜索图像以在其中查找字符的方法。 例如: 假设我将红色字符和绿色字符另存为“ Red Man”和“ Green Man”,我如何确定图像是否包含一个或另一个。 不需要100%识别,或者什么是我想创建的更多功能,我不确定从哪里开始。我已经做了很多谷歌搜索来进行图

  • 问题内容: 我们可以使用java,imagemagick或jmagick找到哪种颜色在图像中占主导地位吗? 问题答案: 在Java中迭代每个像素并确定颜色

  • 问题内容: 我有不同类型的发票文件,我想找到每个发票表 文件。在这张桌子上,位置不是恒定的。所以我去做图像处理。 我先找到了我的轮廓,然后我试着把它转换成我的轮廓 我终于可以抓住桌子的边框了。对于我下面使用的任务 代码。 在这个代码’thresh1’、’thresh2’中,我将根据文件进行更新。 所以使用这个代码我可以成功地读取图像中表格的位置, 利用这个职位,我将处理我的发票pdf文件。 但是,

  • 我目前正在阅读OpenCV网站tyring上的示例代码,以查找图像中的轮廓。 我首先读取图像并转换为灰度: 然后,我通过应用阈值将图像转换为二进制: 根据教程...然后,我应该能够调用阈值图像上的: 当尝试执行此代码时,由于某种原因,我得到一个类型错误: 轮廓=cv2。findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_Abrox_SIMPLE)类型错误:图像不