OpenCV 角点检测代码错误:IndexError: boolean index did not match indexed array along dimension 0

以下代码是使用 OpenCV 进行角点检测的示例代码,代码中出现了一个错误:

import cv2
import numpy as np

img1 = cv2.imread('C:/Users/LENOVO/Desktop/1.png')
img4 = cv2.imread('C:/Users/LENOVO/Desktop/4.png')

gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
gray1 = np.float32(gray1)
gray4 = cv2.cvtColor(img4,cv2.COLOR_BGR2GRAY)
gray4 = np.float32(gray4)

#输入图像必须是float32,最后一个参数在0.04到0.05
dst1 = cv2.cornerHarris(gray1,2,3,0.04)
dst1 = cv2.dilate(dst1,None)
dst4 = cv2.cornerHarris(gray4,2,3,0.04)
dst4 = cv2.dilate(dst1,None)  # 错误发生在这里

# Threshold for an optimal value, it may vary depending on the image.
img1 [dst1>0.01*dst1.max()] = [0,0,255]
cv2.imshow('dst1',img1)
img4 [dst4>0.01*dst4.max()] = [0,0,255]  # 导致错误的代码
cv2.imshow('dst4',img4)
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

错误信息:

IndexError: boolean index did not match indexed array along dimension 0; dimension is 441 but corresponding boolean dimension is 589

原因:

这个错误是由于在使用布尔索引时,布尔数组的维度与原数组的维度不匹配导致的。在这个代码中,错误发生在 img4 [dst4>0.01*dst4.max()] = [0,0,255] 这一行,因为在 dilate 操作之后,dst4 的维度变为了 589 而 img4 的维度仍为 441。

解决方法:

需要将 dilate 操作的结果赋值给 dst4 而不是 dst1,即 dst4 = cv2.dilate(dst1,None) 改为 dst4 = cv2.dilate(dst4,None)。这样可以保证布尔数组的维度与 img4 的维度相同,从而避免出现索引错误。

修改后的代码:

import cv2
import numpy as np

img1 = cv2.imread('C:/Users/LENOVO/Desktop/1.png')
img4 = cv2.imread('C:/Users/LENOVO/Desktop/4.png')

gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
gray1 = np.float32(gray1)
gray4 = cv2.cvtColor(img4,cv2.COLOR_BGR2GRAY)
gray4 = np.float32(gray4)

#输入图像必须是float32,最后一个参数在0.04到0.05
dst1 = cv2.cornerHarris(gray1,2,3,0.04)
dst1 = cv2.dilate(dst1,None)
dst4 = cv2.cornerHarris(gray4,2,3,0.04)
dst4 = cv2.dilate(dst4,None)  # 修改后的代码

# Threshold for an optimal value, it may vary depending on the image.
img1 [dst1>0.01*dst1.max()] = [0,0,255]
cv2.imshow('dst1',img1)
img4 [dst4>0.01*dst4.max()] = [0,0,255] 
cv2.imshow('dst4',img4)
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

通过修改代码,可以解决 IndexError: boolean index did not match indexed array along dimension 0 错误,成功运行 OpenCV 角点检测代码。

OpenCV 角点检测代码错误:IndexError: boolean index did not match indexed array along dimension 0

原文地址: https://www.cveoy.top/t/topic/km3s 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录