当我使用函数np.array_equal()时,使用opencv和python的代码总是返回false

当我使用函数np.array_equal()时,使用opencv和python的代码总是返回false,python,numpy,opencv,opencv3.0,Python,Numpy,Opencv,Opencv3.0,在下面的代码中,我试图识别形状,然后沿着轮廓裁剪,最后检查是否检测到棕色纸板(下面给出的图片),如果发现,则打印为真。我正在使用python 3和opencv 3.2.0 这是我的密码: from picamera import PiCamera import time import cv2 import numpy as np camera = PiCamera() camera.start_preview() time.sleep(5) camera.capture('/home/pi/De

在下面的代码中,我试图识别形状,然后沿着轮廓裁剪,最后检查是否检测到棕色纸板(下面给出的图片),如果发现,则打印为真。我正在使用python 3和opencv 3.2.0

这是我的密码:

from picamera import PiCamera
import time
import cv2
import numpy as np
camera = PiCamera()
camera.start_preview()
time.sleep(5)
camera.capture('/home/pi/Desktop/piImage/image.jpg')
camera.stop_preview()
img = cv2.imread('/home/pi/Desktop/piImage/image.jpg', 1)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower = np.array([-9, 100, 50])
upper = np.array([9, 255, 255])
mask = cv2.inRange (hsv, lower, upper)
erosion =cv2.erode(mask, (5,5), iterations = 18)
erosion = cv2.dilate(erosion, (5,5), iterations =7)
contours = cv2.findContours(erosion, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)[1]
for cnt in contours:
   approx = cv2.approxPolyDP(cnt, 0.04*cv2.arcLength(cnt, True), True)
   if len (approx)== 3:
       print "triangle"
       cv2.drawContours(img, contours, -1, (0,255,0), 3)
   elif len (approx) == 4 :
       print "quadrilateral"
       cv2.drawContours(img, contours, -1, (255,0,0), 3)
   elif len(approx) > 4:
       print "circle"
       cv2.drawContours(img, contours, -1, (0,0,255), 3)
   rect = cv2.minAreaRect(cnt)
   def crop (img, rect):
       angle = rect[2]
       rows,cols = img.shape[0], img.shape [1]
       m = cv2.getRotationMatrix2D((cols/2, rows/2),angle, 1)
       img_rot = cv2.warpAffine(img,m,(cols,rows))
       rect0 = (rect[0], rect[1], 0.0)
       box = cv2.boxPoints(rect)
       pts = np.int0 (cv2.transform(np.array([box]), m))[0]
       pts[pts < 0] = 0

       crop = img_rot [pts[1][1]:pts[0][1],
                       pts[1][0]:pts[2][0]]
       return crop
img_cropped = crop(img, rect)
cv2.imwrite("/home/pi/Desktop/piImage/cropped image.jpg", img_cropped)
img1 = cv2.imread('/home/pi/Desktop/piImage/cropped image.jpg', 1)
hsv1 = cv2.cvtColor(img1, cv2.COLOR_BGR2HSV)
lower1 = np.array([15, 50, 50])
upper1 = np.array([30, 255, 255])
mask1 = cv2.inRange (hsv1, lower1, upper1)
erosion1 =cv2.erode(mask1, (5,5), iterations = 3)
erosion1 = np.array(cv2.dilate(erosion1, (5,5), iterations =3))
cv2.imwrite ("/home/pi/Desktop/piImage/erosion of cropped image.png", erosion1)
contours1 = cv2.findContours(erosion1, cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)[1]
cv2.drawContours(img_cropped, contours1, -1, (255,255,0), 2)

print erosion1
print mask1
if np.array_equal(erosion1, mask1):
   print "true"
else :
   print "false"
cv2.imshow ('crop e',erosion1)
cv2.imshow ('',img_cropped)
cv2.imshow('eroded', erosion)
cv2.imshow('original', img)
while (1):
   k = cv2.waitKey(0)
   if(k == 27):
    break
cv2.destroyAllWindows()
我不明白为什么它会给出false,因为两个数组似乎都匹配

我关注了这一页:

quadrilateral
[[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
...,
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]]
[[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
...,
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]]

False