Ошибка opencv: размеры входных аргументов не совпадают

im делать смешивание изображений с помощью пирамиды … m получить ошибку opencv .. im после официальных инструкций opencv. http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutorials.html

import cv2 import numpy as np,sys A = cv2.imread('/home/grayhat/apple.jpg') B = cv2.imread('/home/grayhat/orange.jpg') # generate Gaussian pyramid for A G = A.copy() gpA = [G] for i in xrange(6): G = cv2.pyrDown(G) gpA.append(G) # generate Gaussian pyramid for B G = B.copy() gpB = [G] for i in xrange(6): G = cv2.pyrDown(G) gpB.append(G) # generate Laplacian Pyramid for A lpA = [gpA[5]] for i in xrange(5,0,-1): GE = cv2.pyrUp(gpA[i]) L = cv2.subtract(gpA[i-1],GE) lpA.append(L) # generate Laplacian Pyramid for B lpB = [gpB[5]] for i in xrange(5,0,-1): GE = cv2.pyrUp(gpB[i]) L = cv2.subtract(gpB[i-1],GE) lpB.append(L) # Now add left and right halves of images in each level LS = [] for la,lb in zip(lpA,lpB): rows,cols,dpt = la.shape ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:])) LS.append(ls) # now reconstruct ls_ = LS[0] for i in xrange(1,6): ls_ = cv2.pyrUp(ls_) ls_ = cv2.add(ls_, LS[i]) # image with direct connecting each half real = np.hstack((A[:,:cols/2],B[:,cols/2:])) cv2.imwrite('Pyramid_blending2.jpg',ls_) cv2.imwrite('Direct_blending.jpg',real) 

следующая ошибка: –

 OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array') in arithm_op, file /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/arithm.cpp, line 1287 Traceback (most recent call last): File "programs/test11.py", line 25, in <module> L = cv2.subtract(gpA[i-1],GE) cv2.error: /build/buildd/opencv-2.4.8+dfsg1/modules/core/src/arithm.cpp:1287: error: (-209) The operation is neither 'array op array' (where arrays have the same size and the same number of channels), nor 'array op scalar', nor 'scalar op array' in function arithm_op 

One Solution collect form web for “Ошибка opencv: размеры входных аргументов не совпадают”

Кажется, вы здесь не создаете свою гауссову пирамиду:

 # generate Gaussian pyramid for A G = A.copy() gpA = [G] for i in xrange(6): G = cv2.pyrDown(G) gpA.append(G) 

Согласно документации OpenCV на cv2.pyrDown , если вы не укажете dstsize , по умолчанию будет ((src.cols+1)/2, (src.rows+1)/2) . НО, вы всегда понижаете дискретизацию на оригинальной копии G Если я берусь правильно, я думаю, что вы должны применить его на последнем изображении с уменьшенной дискретизацией:

 # generate Gaussian pyramid for A G = A.copy() gpA = [G] for i in xrange(6): G = cv2.pyrDown(gpA[i]) gpA.append(G) 

Обидно, то же самое относится и к вашей пирамиде B.

Теперь ваш скрипт будет работать, если ваши изображения имеют четную форму, но не с нечетной формой из-за того, как cv2.pyrDown вычисляет размер по умолчанию. В этом случае вам нужно предоставить cv2.pyrUp правильный параметр dstsize соответствии с изображением, которое вы используете для создания cv2.substract (или cv2.add ).

 # generate Laplacian Pyramid for A lpA = [gpA[5]] for i in xrange(5,0,-1): size = (gpA[i-1].shape[1], gpA[i-1].shape[0]) GE = cv2.pyrUp(gpA[i], dstsize = size) L = cv2.subtract(gpA[i-1],GE) lpA.append(L) # generate Laplacian Pyramid for B lpB = [gpB[5]] for i in xrange(5,0,-1): size = (gpB[i-1].shape[1], gpB[i-1].shape[0]) GE = cv2.pyrUp(gpB[i], dstsize = size) L = cv2.subtract(gpB[i-1],GE) lpB.append(L) , # generate Laplacian Pyramid for A lpA = [gpA[5]] for i in xrange(5,0,-1): size = (gpA[i-1].shape[1], gpA[i-1].shape[0]) GE = cv2.pyrUp(gpA[i], dstsize = size) L = cv2.subtract(gpA[i-1],GE) lpA.append(L) # generate Laplacian Pyramid for B lpB = [gpB[5]] for i in xrange(5,0,-1): size = (gpB[i-1].shape[1], gpB[i-1].shape[0]) GE = cv2.pyrUp(gpB[i], dstsize = size) L = cv2.subtract(gpB[i-1],GE) lpB.append(L) 

Затем этот пункт относится и к части реконструкции:

 # now reconstruct ls_ = LS[0] for i in xrange(1,6): size = (LS[i].shape[1], LS[i].shape[0]) ls_ = cv2.pyrUp(ls_, dstsize = size) ls_ = cv2.add(ls_, LS[i]) 
Interesting Posts

Подавление научной нотации в пандах?

Команда `python setup.py build_ext –inplace` всегда создает новый каталог

Если программа командной строки не уверен в кодировке stdout, какая кодировка должна выводиться?

Несколько логических сравнений в одной строке для оператора if

Каков метод выполнения nl2br в Генши?

Разделение столбцов файлов данных на отдельные массивы в Python

Как получить горячие клавиши быстрого доступа Tkinter Mac (cmd + key)

Спектроскопические данные по спектру данных панд в 3D с разной длиной массива

KenKen puzzle addends: REDUX A (исправленный) нерекурсивный алгоритм

Неправильные результаты с эволюцией изображения генетического алгоритма

Каков самый простой способ поместить скрипт python в системный трей (Windows)

Python AttributeError: объект 'module' не имеет атрибута 'SSL_ST_INIT'

Пикторизация вектора вложенных циклов

Правильный shebang для скрипта Python

Разница между dir (…) и vars (…) .keys () в Python?

Python - лучший язык программирования в мире.