Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python opencv裁剪不工作_Opencv_Python 2.7_Crop - Fatal编程技术网

Python 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) 这个很好用。我没有错误 但是,

我对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)
这个很好用。我没有错误

但是,当我将其放入主脚本时,它不起作用,我已将其缩小到以下代码部分:

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]方向相反。你的权利,我必须做一些事情来改变这两点被选在不同的位置。谢谢