我正在尝试使用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标量“
任何人都可以帮我解决这个错误。提前付款
答案 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)
我认为某些版本的顺序发生了变化,因为我看到了对这两种版本的引用。