图像变形代码出错

时间:2018-04-10 02:28:17

标签: python numpy opencv

import cv2
import numpy as np

point=np.zeros((32,2),np.float32)
point2=np.zeros((32,2),np.float32)
count=0

def click(event, x, y, flags, param):  
    global count
    global x1,x2,y1,y2

    if event == cv2.EVENT_LBUTTONDOWN:
        if count%2==0:
            point[count,0] = x
            point[count,1] = y
            print (x,y)
            x1=x
            y1=y
            count+=1

        else:
            point2[count,0] = x
            point2[count,1] = y
            print (x,y)
            x2=x
            y2=y
            count+=1
            mophing()

def mophing():

    height,width,channel = img.shape

    for y in range (height):
        for x in range (1,width):
            if(x<x1):
                xratio=x/x1
            else:
                xratio=(width-x)/(width-x1)

            dx=int((xratio)*(x2-x1))
            img[x,y]=img[x+dx,y]

    #Result      
    cv2.imshow('change', img)

img = cv2.imread('messigray.png')

cv2.namedWindow('original')  
cv2.setMouseCallback('original', click )
cv2.imshow('original', img)

cv2.waitKey()

这是我的Python代码 我使用mouseEvent检查someone示例图片中的point1和point2, 我想在两个点击指针之间进行Warping。 然后我写了一个只改变X选项卡值的程序。 但是,运行此代码时,将打印底部的结果。

77 96
374 290
Traceback (most recent call last):
  File "C:\Users\open7\Desktop\MouseWarping.py", line 28, in click
    mophing()
  File "C:\Users\open7\Desktop\MouseWarping.py", line 42, in mophing
    img[x,y]=img[x+dx,y]
IndexError: index 480 is out of bounds for axis 0 with size 480

在结果中,上述两个值是两个点击点的坐标 我想知道最后一行代码的问题和解决方案。 我想知道这段代码是NumPy问题还是OpenCV问题。

1 个答案:

答案 0 :(得分:0)

您现在可能已经解决了这个问题,但是我相信您的问题是一个简单的从0到1的错误。 Python索引从零开始,但是您的range从1开始。您可以将range调用修改为从0开始,但这会弄乱您的数学运算。相反,在访问img数组时只需减去1:

        img[x-1,y-1]=img[x-1+dx,y-1]