在canny边缘检测中得到错误

时间:2014-07-22 19:43:47

标签: python opencv

我正在尝试使用opencv python编写代码,该代码会自动获取canny阈值,而不是每次都手动执行。

img= cv2.imread('micro.png',0)
output = np.zeros(img.shape, img.dtype)
# Otsu's thresholding
ret2,highthresh = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
lowthresh=0.1*highthres
edges = cv2.Canny(img,output,lowthresh,highthresh)
cv2.imshow('canny',edges)

我收到此错误 “文件”test2.py“,第14行,in     edges = cv2.Canny(img,output,lowthresh,highthresh) TypeError:只能将length-1数组转换为Python标量“

任何人都可以帮我解决这个错误。提前付款

2 个答案:

答案 0 :(得分:2)

似乎cv2.threshold返回检测到的边缘,Canny将它们应用于图像。下面的代码对我有用,并在我的图像中给了我一些很好的检测到的边缘。

import cv2

cv2.namedWindow('canny demo')

img= cv2.imread('micro.png',0)
ret2,detected_edges = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
edges = cv2.Canny(detected_edges,0.1,1.0)
dst = cv2.bitwise_and(img,img,mask = edges)
cv2.imshow('canny',dst)

if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

答案 1 :(得分:1)

您正在运行:

cv2.Canny(img,output,lowthresh,highthresh)

正在寻找

cv2.Canny(img,lowthresh,highthresh,output)

我认为某些版本的顺序发生了变化,因为我看到了对这两种版本的引用。