Ошибка экстрактора расстояния контекста формы opencv
Я использую opencv-python для вычисления расстояния между двумя изображениями. Вот мой код:
import cv2
import numpy as np
# images loaded as grayscale images
im1 = cv2.imread("first.bmp", 0)
im2 = cv2.imread("second.bmp", 0)
# converting to binary images
_, im1 = cv2.threshold(im1, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
_, im2 = cv2.threshold(im2, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
# finding contours!!
_, cntr1, _ = cv2.findContours(im1, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
_, cntr2, _ = cv2.findContours(im2, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# In the next few lines I combine different contours founded in each image
# because the method that computes the distance needs single contour and
# would gives an error if given a set of contours
temp = cntr1[0]
for i in range(1, len(cntr1)):
temp = np.vstack([temp, cntr1[i]])
temp2 = cntr2[0]
for i in range(1, len(cntr2)):
temp2 = np.vstack([temp2, cntr2[i]])
# creating shape context distance extractor object, using it to compute
# distance and printing result
scde = cv2.createShapeContextDistanceExtractor()
distance = scde.computeDistance(temp, temp2)
print(distance)
Теперь все выглядит хорошо, если два изображения относительно похожи. например, для изображений a и image b расстояние составляет 0,2716, что довольно мало, и поэтому мы можем заключить, что эти изображения имеют одинаковую форму в них. но когда изображения более различны, например, изображение a и изображение c(изображение перевернуто по горизонтали), возникает ошибка:
cv2.error: OpenCV (3.4.2) C: \ projects \ opencv-python \ opencv \ modules \ core \ src \ matmul.cpp: 1218: ошибка: (-215: подтверждение не выполнено) type == (((6) & ((1 << 3) - 1)) + (((2)-1) << 3)) в функции 'cv::gemmImpl'
Что означает эта ошибка? как я могу решить это?
Кстати, код, который комбинирует контуры, не влияет на предоставленные мною изображения, так как для всех них имеется только один контур. Вы можете просто удалить эти строки и использовать distance = scde.computeDistance(cntr1[0],cntr2[0])
в предпоследней * строке.
* какое удивительное слово