opencv图像处理维度不匹配错误

opencv图像处理维度不匹配错误

错误一ValueError: too many values to unpack (expected 2)

由于opencv处理图像时,图像是三维张量,所以在获取其长和宽时要这样

    rows,cols= image.shape[:2]  #而不能是这样rows,cols= image.shape !!!
#这里取前两个dim  ,如果是要将image的所有的三个维度都取出来则可以写image.shape

错误二ValueError: could not broadcast input array from shape (807,1751,3) into shape (807,1751)

#图像积分
def integral(image):
    rows,cols= image.shape[:2]    #注意这里取前两个dim
    #行积分运算
    inteImageC=np.zeros((rows,cols),np.float32)  #或者是inteImageC=np.zeros(image.shape,np.float32)
    for r in range(rows):
        for c in range(cols):
            if c==0:
                inteImageC[r][c]=image[r][c]
            else:
                inteImageC[r][c]=inteImageC[r][c-1]+image[r][c]
    #列积分运算
    inteImage=np.zeros(image.shape,np.float32)
    for c in range(cols):
        for r in range(rows):
            if r==0:
                inteImage[r][c]=inteImageC[r][c]
            else:
                inteImage[r][c]=inteImage[r-1][c]+inteImageC[r][c]
    inteImage_0=np.zeros((rows+1,cols+1,3),np.float32) 
    inteImage_0[1:rows+1,1:cols+1]=inteImage
    return inteImage_0

这段程序的倒数第三行是正确的,而不能这样写inteImage_0=np.zeros((rows+1,cols+1),np.float32) ,如这样写就会出现这个第二类错误,也是维度不匹配的问题,因为如果这样写,由于image是三维的,而inteImage_0是二维的,显然是不匹配的,就不能执行倒数第二行的赋值了。

错误三 ValueError: setting an array element with a sequence.

还是上面那段程序

#图像积分
def integral(image):
    rows,cols= image.shape[:2]    #注意这里取前两个dim
    #行积分运算
    inteImageC=np.zeros((rows,cols),np.float32)  
    for r in range(rows):
        for c in range(cols):
            if c==0:
                inteImageC[r][c]=image[r][c]
            else:
                inteImageC[r][c]=inteImageC[r][c-1]+image[r][c]
    #列积分运算
    inteImage=np.zeros(image.shape,np.float32)
    for c in range(cols):
        for r in range(rows):
            if r==0:
                inteImage[r][c]=inteImageC[r][c]
            else:
                inteImage[r][c]=inteImage[r-1][c]+inteImageC[r][c]
    inteImage_0=np.zeros((rows+1,cols+1,3),np.float32) 
    inteImage_0[1:rows+1,1:cols+1]=inteImage
    return inteImage_0

看这个第五行,如果写成 inteImageC=np.zeros((rows,cols),np.float32) 这样就是错误的,原因和第二个错误一样,都是image是三维的,你如果使 inteImageC是个二维数组的话,下面是没法通过 image给inteImageC赋值的,所以正确的写法应该是

    inteImageC=np.zeros((rows,cols,3),np.float32)  
    #或者是
    inteImageC=np.zeros(image.shape,np.float32)

三个错误其实都是一类错误,dim不匹配的问题,以后写是还需注意。

参考链接:https://blog.csdn.net/niruoanhaoshiqintian/article/details/82959672

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值