初心者から熟練者までの Opencv - 写真、ビデオ、カメラの読み取りと保存

 導入


OpenCV は、Intel Corporation が開発した人気のオープンソース コンピュータ ビジョン ライブラリです。グレースケール、カラー、深度、特徴ベース、モーション トラッキングなどの画像処理およびコンピューター ビジョン アプリケーション向けに、2500 を超える最適化アルゴリズムと多くのツールキットを提供します。 OpenCV は主に C++ 言語で書かれていますが、Python、Java、C およびその他の言語もサポートしています。オープンソースで広く使用されているという特徴により、コンピュータービジョンや機械学習の分野で広く使用されています。


1. コンピュータの目に映るイメージ

RGB イメージは、赤 (R)、緑 (G)、青 (B) の 3 つのカラー チャネルで構成されるカラー イメージです。各ピクセルには、赤、緑、青のチャンネルの明るさを表す 3 つの値があります。各数値の値は (0 ~ 255) であり、3 つの異なる値の組み合わせがピクセルを形成します。

これら 3 つのチャネルが一緒になって RGB 画像を構成し、その組み合わせによって各ピクセルの色が形成されます。各チャンネルの明るさと色の分布を調整することで、画像の色や外観を変えることができます。

import cv2
import numpy as np
 
# 读取图片
image = cv2.imread('image/1.jpg')
#   打印图片的形状,即高宽和通道数
h, w, c = image.shape
print(h, w, c)
 
#  打印(60,60)的像素点的rgb值
pixel = image[60, 60]
print(pixel)
 
#  创建一个空数组和图像格式大小相同
pixels = np.zeros((h, w, c), dtype=np.uint8)
# 遍历每个像素点
for y in range(h):
    for x in range(w):
        # 获取像素点的数值
        pixel = image[y, x]
        # 将像素点的数值存储到新数组中
        pixels[y, x] = pixel
 
# 输出结果
print(pixels)

 印刷結果は以下のようになりますが、これはコンピュータから見た絵の構造であり、実際の動作ではブレークポイントを使用して順次印刷することができます。

もちろん、上記は本質をよりよく理解するためのものであり、配列を直接使用して上記の操作を完了することができます。

import cv2
import numpy as np
 
# 读取图片
image = cv2.imread('image.jpg')
 
# 将图像转换为NumPy数组
pixels = np.array(image)
 
# 输出结果
print(pixels)

2. 画像の読み取り、表示、保存

import cv2
 
# 读取图片并转为灰度图
# image = cv2.imread('image/1.jpg')
image = cv2.imread('image/1.jpg', cv2.IMREAD_GRAYSCALE)
# 显示图片窗口,并命名为 'IMG'
cv2.imshow('IMG', image)
 
# 保存到image路径下并命名为jujingyi
cv2.imwrite('image/jujingyi.jpg', image)
# 等待键盘输入,参数为0表示一直等待,直到按下任意键
cv2.waitKey(0)
 
# 关闭所有打开的窗口
cv2.destroyAllWindows()

 cv2.imread() 関数は画像を読み取るために使用されます

画像を保存するには cv2.imwrite() 関数を使用します

cv2.waitKey(0) 0 は任意のキーを押して停止することを意味し、1000 は 1000 ミリ秒後にウィンドウを閉じることを意味します。

 

3. ビデオの読み込みと表示

import cv2
 
cap = cv2.VideoCapture(0)
 
while True:
    success, image = cap.read()
    cv2.imshow('IMG', image)
    
    # 等待1毫秒,检测键盘输入
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
 
# 循环结束后释放摄像头资源和关闭窗口
cap.release()
cv2.destroyAllWindows()

コンピュータに付属のカメラを使用する場合、cv2.VideoCapture(0) は 0 に設定されます。周辺機器を使用する場合は、1 または 2 を選択して、コンピュータ内の周辺機器カメラの番号を確認します。ビデオアドレスを入力して、指定したビデオを読み取ることもできます。

while ループを使用して、カメラによって読み取られた画像の各フレームを反復処理し、画像に保存します。

cv2.waitKey(1) 関数を使用して 1 ミリ秒待機し、キーボード入力を検出しました。ビット演算子 & と ord() 関数を使用して、キーボードから入力された文字と ASCII 文字 'q' (つまり、'q' キーが押された) を比較します。等しい場合は、break ステートメントを介してループを終了します。

ループを終了するときは、カメラのリソースを解放し、ウィンドウを閉じる必要があります。 cap.release() を使用してカメラ リソースを解放し、次に cv2.destroyAllWindows() を呼び出して表示ウィンドウを閉じます。

このようにして、キーボードの「q」キーが押されると、プログラムはループを終了し、カメラのリソースを解放し、ウィンドウを閉じます。

カメラで録画した写真を保存したい場合

import cv2
 
cap = cv2.VideoCapture(0)
 
# 设置保存视频的参数
save_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
save_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (save_width, save_height))
 
while True:
    success, image = cap.read()
    cv2.imshow('IMG', image)
    
    # 保存每一帧图像到视频文件
    out.write(image)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
 
cap.release()
out.release()
cv2.destroyAllWindows()

カメラのパラメータに従ってビデオ保存に関連するパラメータを設定します。保存されたビデオの幅と高さはカメラのパラメータと同じで、4 文字コード (fourcc) を使用してビデオ コーデックを XVID として定義します。フレーム レートを 20.0 に設定し、保存されるビデオ サイズを指定します。

ループに入る前に、 cv2.VideoWriter() 関数を使用してビデオを保存するオブジェクトを作成します。このうち、最初のパラメータは保存されたビデオ ファイル名、2 番目のパラメータは指定されたビデオ コーデック、3 番目のパラメータはフレーム レート、4 番目のパラメータは保存されたビデオのサイズです。

ループでは、画像の各フレームがビデオ ファイルに保存されます。これは out.write(image) を通じて実装されます。

最後に、ループを抜けた後、カメラ リソースを解放し、ビデオ オブジェクトを閉じる必要があります。 cap.release() を使用してカメラ リソースを解放し、out.release() を使用してビデオ オブジェクトを閉じます。

このようにして、キーボードの「q」キーが押されると、プログラムはループを終了し、カメラによって読み取られたデータをビデオ ファイル「output.avi」として保存します。

cv2.VideoWriter() 関数は、ビデオを保存するためのオブジェクトを作成するために使用されます。そのパラメータについては以下で説明します。

ファイル名: 保存されたビデオのファイル名。ここの「output.avi」は保存されたビデオのファイル名で、必要に応じて変更できます。

fourcc: ビデオ コーデック。 fourcc は、ビデオのコーデックを指定するために使用される 4 文字のコードです。一般的な 4 文字コードには MP4V、XVID、MJPG などがあり、必要に応じて選択できます。サンプル コードでは、XVID コーデックの使用を示すために *'XVID' を使用しました。

fps: 1 秒あたりのフレーム数。 fpsとは動画を保存する際のフレームレート、つまり1秒間に再生されるフレーム数を表します。サンプル コードでは、フレーム レートを 20.0 に設定していますが、必要に応じて調整できます。

FrameSize: ビデオのサイズ。 FrameSize はビデオを保存するときのサイズ、つまり画像の各フレームのサイズです。サンプルコードでは、寸法を (save_width, save_height) に設定します。save_width と save_height は、カメラのパラメーターに従って取得された幅と高さです。
 

ビデオ ファイルを MP4 形式で保存する場合は、fourcc パラメータを MP4 形式に適したコーデックに変更

fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (save_width, save_height))

 

上記のコードでは、*'mp4v'fourcc パラメータとして使用しました。これは、MP4 コーデックを使用することを意味します。同時に保存するファイル名を 'output.mp4' に変更します。

この変更により、カメラで読み取ったデータはMP4形式で保存されるようになります。 OpenCV のバージョンがこのコーデックをサポートしていることを確認してください。サポートされていない場合、エラーが発生する可能性があります。

おすすめ

転載: blog.csdn.net/weixin_45303602/article/details/133934918