私はこの方法でビデオの解像度を(mp4で)(800x600に)変更しようとします。
import cv2
cap = cv2.VideoCapture('file')
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
私は何を間違っていますか?
私は試した -
cv2.resizeWindow("ssss", 300, 300),
そして
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800)
無効 !
import cv2
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
cv2.waitKey(10)
ret, frame = cap.read()
cap.set(3, 800)
cap.set(4, 600)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2BGRA)
print cap.get(3) # return default 1280
cv2.imshow('frame',gray)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
これはあなたのコードがファイルではなくウェブカメラで動作します
ビデオファイルの場合、ウィンドウのサイズを変更できます
cv2.resizeWindow(winname, width, height)
そのため、最初にウィンドウを名前で定義し、サイズを変更します
例
cv2.namedWindow("frame", 0);
cv2.resizeWindow("frame", 800,600);
あなたのコードには注意が必要なことがいくつかあると思います。
OpenCVドキュメント for VideoCapture
で説明されているように、デフォルトのWebCamにアクセスする場合は、次のようにクラスを初期化する必要があります。
cap = cv2.VideoCapture('file')
次にカメラの解像度を変更しようとしている場合は、2つのset
行をcap
の初期化のすぐ下に移動し、一度だけ実行することをお勧めします-読むたびに枠の中。定数を使用して適切な属性にアクセスすることもできます。
cap = cv2.VideoCapture('file')
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
# Your while loop and the rest of the code...
ファイルからフレームを読み取ろうとしていて、その解像度を変更したい場合は、おそらくresize
メソッドを使用することをお勧めします here 。これは、フレームを読み取った直後に、ループ内で行う必要があります。それは次のようなものかもしれません:
resize(ret, ret, Size(800, 600), 0, 0, INTER_CUBIC);
これがお役に立てば幸いです。
cap.set()
は、_640,480
_の解像度未満では効果がありません(少なくとも私のMacbook Proの場合)。解像度を上げることはできますが、たとえば_300,300
_に設定しても効果はありません。私の経験として、あなたはresize()
の後にフレームでread()
を呼び出す必要がありました。