openCV ile ilgili bir sorum var

OpenCV’ye yeni başladım fakat bazen işin içinden çıkamıyorum.Türkçe kaynak yetersizliğinden.
Görüntü piramitlerine çalıştığım web sitesinde şu kodlar paylaşılmış fakat yeteri kadar açıklamada bulunmamış.Kodlar şu şekilde:

import cv2 as cv
import numpy as np
import sys
A = cv.imread("C:/Users/Asus/Desktop/opencv/elma.jpg")
B = cv.imread("C:/Users/Asus/Desktop/opencv/portakal.jpg")

# A için Gauss Piramdi oluşturduk!
G = A.copy()  # Burda A'nın kopyasını oluşturduk!
gpA = [G]     # Burda A'nın kopyasını bir listeye ekledik!
for i in range(6):
    G = cv.pyrDown(G)  # Burda A'nın küçük boyutlarını oluşturduk!
    gpA.append(G)      # Burda A'nın küçük boyutlarını listeye ekledik!


# B için Gauss Piramidi oluşturduk!
G = B.copy()
gpB = [G]
for i in range(6):
    G = cv.pyrDown(G)
    gpB.append(G)


# A için Laplacian Piramidi oluşturduk!
lpA = [gpA[5]]
for i in range(5,0,-1):
    GE = cv.pyrUp(gpA[i])
    L = cv.subtract(gpA[i-1],GE)
    lpA.append(L)

# B için Laplacian Piramidi oluşturduk!
lpB = [gpB[5]]
for i in  range(5,0,-1):
    GE = cv.pyrUp(gpB[i])
    L = cv.subtract(gpB[i-1],GE)
    lpB.append(L)

# Şimdi her yüzeydeki görüntülerin sol ve sağ yarısını ekleyelim!
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)

# Şimdi yeniden yapılandıralım
ls_ = LS[0]
for i in range(1,6):
    ls_ = cv.pyrUp(ls_)
    ls_ = cv.add(ls_,LS[i])

real = np.hstack((A[:,:cols/2],B[:,cols/2:]))

cv.imshow("Pyramid_blending2.jpg",ls_)
cv.imshow("Harmanlama",real)

cv.waitKey(0)
cv.destroyAllWindows()

Bu kodları rica etsem anlatabilir misiniz?
hstack(),subtract() fonksiyonlarını da pek anlamadım

Bu arada bu kodlarda şu hatayı da alıyorum:

Traceback (most recent call last):
  File "C:/Users/Asus/PycharmProjects/Open CV/openCV tutorials sitesinden notlar/16-Görüntü Piramidleri .py", line 68, in <module>
    L = cv.subtract(gpA[i],GE)
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:669: error: (-209: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 function 'cv::arithm_op'

Web sitesindeki kod Windows’ta oldugunu ve kullanici adinin Asus oldugunu mu varsayiyor? Bence baska bir web sitesi bulmanin vakti gelmis.

Web sitesi anlatmamis mi?

Resmi dokumentasyonlarini okudun mu?

Web sitesinden çalışarak kendim yazdım.Web sitesinde "C:/Users/Asus/Desktop/opencv/elma.jpg" bu şekilde değildi ben yazdım. Bunun bi önemi yok diye düşünüyorum. Ayrıca web sitesi anlatmış fakat yukarıda bahsettiğim gibi yeterli açıklama yapmadığından iyi anlamadım.

Web sitesinde yazanlarin onemi var cunku bunlari sana ikinci kere anlatmak icin vakit harcayan herkes orada yazilanlari tekrarlayip bosa zaman harcama riskini aliyor.

Kodun kaynagina gelince de: Bir kodu satir satir izah edecek bir insanin o kodun kaynaginin neresi oldugunu bilmesi gerektigini dusunuyorum. Senin yazdigin kisimlari bilmek de, oralari aciklama geregini kaldiriyor.

Mesela bence yukaridaki kotu kodu sadece yaninda cok guzel bir yazi kurtarabilir. Boyle bir yazi yoksa, kodla ugrasmaktansa sifirdan kod+yazi yazmak tercih edilmeli.

Yani: Web sitesi neresi?

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html
buyur