【问题标题】:OpenCV Canny Edge Detection PythonOpenCV Canny 边缘检测 Python
【发布时间】:2016-05-18 09:44:01
【问题描述】:

我收到此错误:

OpenCV 错误:未知函数中不支持的格式或格式组合(),文件 C:\slave\WinInstallerMegaPack\src\opencv\modules\imgproc\src\canny.cpp,第 67 行 回溯(最近一次通话最后): 边缘= cv2.Canny(帧,100,100) cv2.error : C:\slave\WinInstallerMegaPack\srx\opencv\modules\imgproc\src\canny.cpp:67: 错误:(-210)

当我运行这段代码时:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while(1):
   _, frame = cap.read()    
   cv2.imshow('Original',frame)
   edges = cv2.Canny(frame,100,100)
   cv2.imshow('Edges',edges)
   k = cv2.waitKey(5) & 0xFF
   if k == 27:
      break

cv2.destroyAllWindows()
cap.release()

【问题讨论】:

  • 我需要这些信息,很紧急!谢谢
  • frame 必须是灰度的。在调用 Canny 之前使用cv2.cvtColor(... cv2.COLOR_BGR2GRAY)
  • 非常感谢!!完美!

标签: python-2.7 opencv3.1


【解决方案1】:

Canny 需要灰度图像作为输入,但您的 frame 是 3 通道 (BGR) 图像。在将其传递给 Canny 之前,您需要将其转换为灰度:

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 100)

作为旁注,请记住 Canny 阈值用于滞后,因此您可能希望将first_threshold 设置为类似于[0.25 - 0.5] * second_threshold

edges = cv2.Canny(gray, 100, 200) 

【讨论】:

  • 只是一个不一定与此问题相关的问题,但是您是否知道一种填充检测到的边缘内部的方法,而不是跟踪检测到的边缘的外部?我应该开始另一个线程吗?
  • drawContours(... cv2. FILLED... ) 或 fillPoly。这方面已经有很多问题/答案了
  • 谢谢。所以,我想找到最大的轮廓,并从中删除背景。我见过寻找轮廓的功能,但我不知道如何区分轮廓、轮廓内部的内容和背景。我还担心最大的轮廓可能是内容而不是边界框。考虑一个盒子。在框内,我在页面上来回绘制一条连续的线,这样这些线永远不会交叉,并且我在起点处结束(线回绕)。该轮廓将比边界框长。不太可能?不是为了我需要的。
猜你喜欢
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多