次のコードを使用して、ウェブカメラで画像をキャプチャしました。
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)
しかし、エラーメッセージが表示され続けます
OpenCV エラー: cvGetSubRect の入力配列 () のサイズが正しくありません、ファイル /build/buildd/opencv-2.3.1/modules/core/src/array.cpp、行 1262
キャプチャされた画像のサイズは 960x544 で、4 つのタプルのリストで分割しています。最初の 4 つは次のとおりです。
- (0, 0, 240, 136)
- (240, 0, 480, 136)
- (480, 0, 720, 136)
- (720, 0, 960, 136)
四角形はこの順序で取得され、3 番目の 4 タプル (480, 0, 720, 136) の四角形を取得しようとすると、エラーがスローされます。元の画像はそれよりも大きい (960x544) のですが、何が問題なのですか? image.crop() を使用して Python の PIL で同じアプローチが機能しましたが、opencv の代替方法は少し異なるように見えます。