run*_*ken 12 python opencv numpy
我偶然发现了这个dtype问题并希望它对某些人有所帮助.
通常我们会像这样转换颜色,这有效:
img = cv2.imread("img.jpg"), 0)
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)
Run Code Online (Sandbox Code Playgroud)
但有时您可能会先将图像标准化:
img = cv2.imread("img.jpg"), 0)/255.
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)
Run Code Online (Sandbox Code Playgroud)
这将导致此错误:
错误:(-215)深度== CV_8U || 深度== CV_16U || 深度== CV_32F函数> cv :: cvtColor
关键是,在前一个例子中,dtype是uint8,而在后者中它是float64.要更正此问题,请添加一行:
img = cv2.imread("img.jpg"), 0)/255.
img=img.astype(numpy.float32)
imgColor=cv2.cvtColor(img , cv2.COLOR_GRAY2BGR)
Run Code Online (Sandbox Code Playgroud)
所以这将是一个类似的问题,已经解决但与另一个函数cv2.drawKeypoints()有关.
这将有效:
img = cv2.imread("img.jpg"), 1)
img_out = numpy.copy(img)
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4)
Run Code Online (Sandbox Code Playgroud)
但是,这不会编译:
img = cv2.imread("img.jpg"), 1)/255.0
img_out = numpy.copy(img)
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4)
Run Code Online (Sandbox Code Playgroud)
这里我们有这个错误:
错误:( - 5)输入图像的类型不正确.
再次,除以255或使用"img"导致转换为浮点数的任何其他处理将使"img"不是drawKeypoints的正确类型.这里添加img = img.astype(numpy.float32)没有帮助.对于输入图像img,事实证明uint8工作,但float32不工作.我在文件中找不到这样的要求.令人困惑的是,与上述与cvtColor相关的问题不同,它抱怨"类型".
所以要使它工作:
img = cv2.imread("img.jpg"), 1)/255.0
img_out = numpy.copy(img)
img=img.astype(numpy.uint8)
image_out = cv2.drawKeypoints(img,keypointList,img_out,(255,0,0),4)
Run Code Online (Sandbox Code Playgroud)
对于最后一行,我认为cv2.DRAW_RICH_KEYPOINTS将作为标志(drawKeyPoints函数中的最后一个参数).但是只有当我使用数字4时它才有效.任何解释将不胜感激.