Python opencv裁剪不工作
我对OpenCV比较陌生。我从教程中收集了一些信息,您可以使用以下脚本进行裁剪:Python opencv裁剪不工作,opencv,python-2.7,crop,Opencv,Python 2.7,Crop,我对OpenCV比较陌生。我从教程中收集了一些信息,您可以使用以下脚本进行裁剪: import cv2 import numpy as np import video cam = cv2.VideoCapture(0) ret,vis = cam.read() crop = vis[100:400, 100:300] cv2.imshow("Img",vis) cv2.imshow("Crop",crop) cv2.waitKey(0) 这个很好用。我没有错误 但是,
import cv2
import numpy as np
import video
cam = cv2.VideoCapture(0)
ret,vis = cam.read()
crop = vis[100:400, 100:300]
cv2.imshow("Img",vis)
cv2.imshow("Crop",crop)
cv2.waitKey(0)
这个很好用。我没有错误
但是,当我将其放入主脚本时,它不起作用,我已将其缩小到以下代码部分:
def PicTake(self):
ret,vis = self.cam.read()
x1,y1 = self.selection[0]
x2,y2 = self.selection[1]
a = 0
taken = 0
while taken == 0:
if cv2.imread("C:\Python27\opencv\samples\python2\Major\Test"+str(a)+".png") == None:
crop = vis[x1:y1, x2:y2]
print crop
cv2.imshow("crop",crop)
cv2.imwrite("C:\Python27\opencv\samples\python2\Major\Test"+str(a)+".png",crop)
taken = 1
else:
a+=1
return ("Picture Taken")
其中self.selection只是两个元组的列表[x1,y1,x2,y2]。在第一个if语句之后,print crop返回[]和空列表
那么,是的,为什么它适用于数字和其他情况?很好,但不适用于这里
非常感谢您的帮助,谢谢 vis只是一个numpy数组。
检查print vis.shape的结果以检查输入图像的尺寸。
如果是彩色图像,则如下所示:
(367, 550, 3)
它按高度、宽度和颜色深度的顺序表示尺寸。
因此,如果要在x2>x1和y2>y1时从x1、y1到x2、y2选择一个部分:
vis[y1:y2, x1:x2]
这也包括深度维度。
注意,如果y2vis只是一个numpy数组。
检查print vis.shape的结果以检查输入图像的尺寸。
如果是彩色图像,则如下所示:
(367, 550, 3)
它按高度、宽度和颜色深度的顺序表示尺寸。
因此,如果要在x2>x1和y2>y1时从x1、y1到x2、y2选择一个部分:
vis[y1:y2, x1:x2]
这也包括深度维度。
注意,如果y2您需要使用
crop = vis[y1:y2,x1:x2]
请参阅以获得详细解释
还要检查摄像机是否真的输出了任何东西。排队后
ret, vis = self.cam.read()
添加这些行
if not ret:
print 'No captured images'
你需要使用
crop = vis[y1:y2,x1:x2]
请参阅以获得详细解释
还要检查摄像机是否真的输出了任何东西。排队后
ret, vis = self.cam.read()
添加这些行
if not ret:
print 'No captured images'
Croping可能非常令人困惑。CV world在角点对X1和Y1上运行,而python则通过切片数组来工作。正确的裁剪可能如下所示:
crop=original[y1:y2,x1:x2]注意你的Y和X的交叉可能会非常混乱。CV world在角点对X1和Y1上运行,而python则通过切片数组来工作。正确的裁剪可能如下所示:
crop=original[y1:y2,x1:x2]注意你的Y和X的值是什么[x1,y1,x2,y2]?我获取值的代码是:def onmouseself,event,X,Y,flags,param:self.onwindow=1鼠标在屏幕上X,Y=np.int16[X,Y]BUG self.currentxy=X,如果event==cv2.event\u LBUTTONDOWN:self.RectOn=0删除旧矩形并创建新矩形self.click=1 self.x1y1=x,y self.selection[0]=self.x1y1 self.selection[1]=0,0如果event==cv2.event\u LBUTTONUP:self.click=0 self.x2y2=x,y self.selection[1]=self.x2y2 self.RectOn=1 print self.selection[x1,y1,x2,y2]的值是什么?我获取这些值的代码是:def onmouseself,event,x,y,flags,param:self.onwindow=1鼠标在屏幕上,y=np.int16[x,y]BUG self.currentxy=x,如果event==cv2.event\u LBUTTONDOWN:self.RectOn=0删除旧矩形并创建新矩形self.click=1 self.x1y1=x,y self.selection[0]=self.x1y1 self.selection[1]=0,0如果event==cv2.event\u LBUTTONUP:self.click=0 self.x2y2=x,y self.selection[1]=self.x2y2 self.RectOn=1打印self.selection谢谢!它在工作,我的[y1:y2,x1:x2]方向相反。你的权利,我必须做一些事情来改变这两点被选在不同的位置。谢谢非常感谢。它在工作,我的[y1:y2,x1:x2]方向相反。你的权利,我必须做一些事情来改变这两点被选在不同的位置。谢谢