2016-08-23 53 views
0

嗨我有這個代碼塊建議給我,我試圖修改它使用寬度和高度設置帽來調整四顯示器的整體大小,但每隔一個運行它拋出這個ValueError:無法將形狀(240,320)的輸入數組廣播到形狀(480,640)中。當然,數字會根據我如何修改集合中的大小值而改變。我的總體目標是將四幀插入一個tkinter gui,我現在正在顯示單個通道。目前我的gui顯示一個640x480通道,我想將這個四邊形顯示到相同尺寸的框架中。以下是當前代碼:調整大小的四幀視頻從第

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 
ret, frame = cap.read() 

red = np.zeros(frame.shape, 'uint8') 
green = np.zeros(frame.shape, 'uint8') 
blue = np.zeros(frame.shape, 'uint8') 

cap.set(cv2.CAP_PROP_FRAME_WIDTH, int(640 *.5)) 
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, int(480 *.5)) 

while(True): 
    ret, frame = cap.read() 
    b, g, r = cv2.split(frame) 

    red[..., 0], red[..., 1], red[..., 2] = r, r, r 
    green[..., 0], green[..., 1], green[..., 2] = g, g, g 
    blue[..., 0], blue[..., 1], blue[..., 2] = b, b, b 

    final = cv2.vconcat((
     cv2.hconcat((frame, red)), 
     cv2.hconcat((green, blue)) 
    )) 

    cv2.imshow('frame', final) 

    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 

cap.release() 
cv2.destroyAllWindows() 
+0

一旦你看到它,你就可以調整這個框架的尺寸D – Miki

+0

我不知道我是怎麼錯過了那個笑聲謝謝@Miki –

回答

0

將cap.set和顏色形狀移動到讀取位置後修復了我的問題。

import numpy as np 
import cv2 

cap = cv2.VideoCapture(0) 
ret, frame = cap.read() 

while(True): 
    ret, frame = cap.read() 
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, int(640 *.5)) 
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, int(480 *.5)) 
    red = np.zeros(frame.shape, 'uint8') 
    green = np.zeros(frame.shape, 'uint8') 
    blue = np.zeros(frame.shape, 'uint8') 
    b, g, r = cv2.split(frame) 

    red[..., 0], red[..., 1], red[..., 2] = r, r, r 
    green[..., 0], green[..., 1], green[..., 2] = g, g, g 
    blue[..., 0], blue[..., 1], blue[..., 2] = b, b, b 

    final = cv2.vconcat((
     cv2.hconcat((frame, red)), 
     cv2.hconcat((green, blue)) 
    )) 

    cv2.imshow('frame', final) 

    k = cv2.waitKey(30) & 0xff 
    if k == 27: 
     break 

cap.release() 
cv2.destroyAllWindows()