无法使用img.shape中的高度和宽度进行进一步的计算

时间:2019-03-06 13:58:24

标签: python cv2

我正在尝试使用cv2将图像分割成多个块。我的问题是cv2.imread可以识别我的身高和宽度,但是当我使用这些值计算x和y时,我的结果是0。

我在运行代码时也收到此错误:

  

“切片索引必须为整数或无,或具有 index 方法”   在代码img = img[y:y+h, x:x+w]

的这一部分上
 import cv2
 import time

 img = cv2.imread('C:/Users/ML/Desktop/DataMatrix/Unbenannt.png')
 img2 = img

 height, width, channels = img.shape

 print (height, width, channels)
 CROP_W_SIZE  = 2 
 CROP_H_SIZE = 2

 for ih in range(CROP_H_SIZE ):
     for iw in range(CROP_W_SIZE ):

        x = width / CROP_W_SIZE * iw
        y = height / CROP_H_SIZE * ih
        h = (height / CROP_H_SIZE)
        w = (width / CROP_W_SIZE )

        print(x,y,h,w)

        img = img[y:y+h, x:x+w]

        NAME = str(time.time()) 
        cv2.imwrite("C:/Users/ML/Desktop/DataMatrix/CROP/" + str(time.time()) +  ".png",img)
        img = img2

2 个答案:

答案 0 :(得分:2)

您只需要对x,y,w,h的计算使用一个int()函数即可。当您分割时,它们会转换为浮点数。

答案 1 :(得分:1)

  • x和y的值似乎为0,因为在循环的第一次迭代中,ih和iw的值为0。

  • 索引错误是由于在Python 3中引起的,该除法不是整数除法,但它返回一个浮点数。您可能想使用////。