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问题。
答案 0 :(得分:0)
您现在可能已经解决了这个问题,但是我相信您的问题是一个简单的从0到1的错误。 Python索引从零开始,但是您的range
从1开始。您可以将range
调用修改为从0开始,但这会弄乱您的数学运算。相反,在访问img
数组时只需减去1:
img[x-1,y-1]=img[x-1+dx,y-1]