Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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和#x27之间有区别吗;s cv.GetSubRect和PIL';s.crop()?_Python_Opencv - Fatal编程技术网

Python opencv和#x27之间有区别吗;s cv.GetSubRect和PIL';s.crop()?

Python opencv和#x27之间有区别吗;s cv.GetSubRect和PIL';s.crop()?,python,opencv,Python,Opencv,我使用以下代码用网络摄像头拍摄了一张图像: cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE) capture = cv.CaptureFromCAM(0) cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, 960) cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, 544) def record(): frame

我使用以下代码用网络摄像头拍摄了一张图像:

cv.NamedWindow("w1", cv.CV_WINDOW_AUTOSIZE)
capture = cv.CaptureFromCAM(0)
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH, 960)
cv.SetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT, 544)

def record():
    frame = cv.QueryFrame(capture)
    cv.ShowImage("w1", frame)
    splitter(frame, 4)
我正在尝试使用cv.GetSubRect将其裁剪成更小的片段:

def splitter(image, split):
    width, height = cv.GetSize(image)
    x = width/split
    y = height/split

    # Form the 4-tuples.
    img_parts = []
    for y_pos in range(split):
        for x_pos in range(split):
            xy_section = (x_pos*x, y_pos*y, (x_pos+1)*x, (y_pos+1)*y)
            # print xy_section
            img_parts.append(xy_section)

    # The cropping.
    cropped_parts = []
    for part in img_parts:
        # print "part "+str(part)
        cropped = cv.GetSubRect(image, part) # Error is thrown here
        cropped_parts.append(cropped)
(pos_left, pos_top, width, height)
但我一直收到错误信息

OpenCV错误:cvGetSubRect文件中输入数组()的大小不正确 /build/buildd/opencv-2.3.1/modules/core/src/array.cpp,第1262行

捕获的图像大小为960x544,我将其拆分为4元组列表,其中前四个为:

  • (0,0240136)
  • (240,0480136)
  • (480,0720,136)
  • (7200960136)
矩形是按这个顺序取的,当尝试获取第三个4元组的矩形(480、0、720、136)时会抛出错误。原始图像比那个(960x544)大,所以出了什么问题?Python的PIL使用image.crop()使用了相同的方法,但opencv的替代方法似乎有点不同,我只是不知道如何使用?

opencv的.GetSubRect()与PIL的.crop()有点不同。两者都以4元组作为参数,但它们描述的裁剪区域不同

PIL.crop():

例如,在100x100大小的图像(0、50、50、100)中,精确裁剪图像的左下角,从而生成50x50大小的图像

Opencv.GetSubRect():


对于相同大小的图像100x100,(0,50,50,100)将从原始图像的位置(0,50)开始裁剪50x100大小的区域。这样会超出原始图像大小,并引发错误。要裁剪左下角,(0,50,50,50)有效。

找出问题所在。opencv和pil在裁剪中使用4元组的方式有一个关键的区别。我明天会更新答案。
(pos_left, pos_top, width, height)