Opencv vom Anfänger bis zum Experten – Lesen und Speichern von Bildern, Videos und Kameras

 Einführung


OpenCV ist eine beliebte Open-Source-Computer-Vision-Bibliothek, die von der Intel Corporation entwickelt wurde. Es bietet mehr als 2500 Optimierungsalgorithmen und viele Toolkits für Bildverarbeitung und Computer-Vision-Anwendungen wie Graustufen, Farbe, Tiefe, merkmalsbasiertes Tracking und Bewegungsverfolgung. OpenCV ist hauptsächlich in der Sprache C++ geschrieben, unterstützt aber auch Python, Java, C und andere Sprachen. Aufgrund seiner Open-Source- und weit verbreiteten Eigenschaften wird es häufig in den Bereichen Computer Vision und maschinelles Lernen eingesetzt.


1. Bild in den Augen eines Computers

Ein RGB-Bild ist ein Farbbild, das aus drei Farbkanälen besteht: Rot (R), Grün (G) und Blau (B). Jedes Pixel hat drei Werte, die seine Helligkeit im roten, grünen und blauen Kanal darstellen. Der Wert jeder Zahl ist (0-255), und die Kombination dreier verschiedener Werte bildet ein Pixel.

Diese drei Kanäle bilden zusammen das RGB-Bild und ihre Kombination ergibt die Farbe jedes Pixels. Durch Anpassen der Helligkeit und Farbverteilung jedes Kanals können Sie die Farbe und das Erscheinungsbild Ihres Bildes ändern.

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)

 Das Druckergebnis ist wie unten dargestellt. Dies stellt die Struktur eines Bildes in den Augen des Computers dar. Während des eigentlichen Vorgangs können Haltepunkte zum sequentiellen Drucken verwendet werden.

Das Obige dient natürlich dazu, das Wesentliche des Bildes besser zu erkennen. Wir können ein Array direkt verwenden, um die obigen Vorgänge abzuschließen.

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

2. Bilder lesen, anzeigen und speichern

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()

 Die Funktion cv2.imread() wird zum Lesen von Bildern verwendet

Die Funktion cv2.imwrite() wird zum Speichern von Bildern verwendet

cv2.waitKey(0) 0 bedeutet, dass Sie zum Stoppen eine beliebige Taste drücken, 1000 bedeutet, dass das Fenster nach 1000 Millisekunden geschlossen wird.

 

3. Video-Lesung und -Anzeige

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) ist auf 0 eingestellt, um die mit dem Computer gelieferte Kamera zu verwenden. Wenn Sie ein Peripheriegerät verwenden, wählen Sie 1 oder 2, um die Nummer Ihrer Peripheriekamera im Computer zu überprüfen. Sie können auch die Videoadresse eingeben, um das angegebene Video zu lesen.

Verwenden Sie eine While-Schleife, um jedes von der Kamera gelesene Bildbild zu durchlaufen und es im Bild zu speichern.

Wir haben die Funktion cv2.waitKey(1) verwendet, um 1 Millisekunde zu warten und Tastatureingaben zu erkennen. Verwenden Sie den bitweisen Operator & und die Funktion ord(), um über die Tastatur eingegebene Zeichen mit dem ASCII-Zeichen „q“ zu vergleichen (d. h. die Taste „q“ wird gedrückt). Wenn gleich, verlassen Sie die Schleife mit der break-Anweisung.

Beim Verlassen der Schleife müssen wir die Kameraressourcen freigeben und das Fenster schließen. Verwenden Sie cap.release(), um die Kameraressourcen freizugeben, und rufen Sie dann cv2.destroyAllWindows() auf, um das Anzeigefenster zu schließen.

Auf diese Weise verlässt das Programm die Schleife, gibt die Kameraressourcen frei und schließt das Fenster, wenn die Taste „q“ auf der Tastatur gedrückt wird.

Wenn wir die von unserer Kamera aufgenommenen Bilder speichern möchten

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()

Wir legen die relevanten Parameter für die Videospeicherung entsprechend den Parametern der Kamera fest: Die Breite und Höhe des gespeicherten Videos stimmen mit den Parametern der Kamera überein. Verwenden Sie einen vierstelligen Code (fourcc), um den Videocodec als XVID zu definieren. Stellen Sie die Bildrate auf 20,0 ein und geben Sie die gespeicherte Videogröße an.

Bevor wir in die Schleife eintreten, verwenden wir die Funktion cv2.VideoWriter(), um ein Objekt zum Speichern des Videos zu erstellen. Dabei ist der erste Parameter der Name der gespeicherten Videodatei, der zweite Parameter der angegebene Videocodec, der dritte Parameter die Bildrate und der vierte Parameter die Größe des gespeicherten Videos.

In der Schleife wird jedes Bildbild in der Videodatei gespeichert, was über out.write(image) implementiert wird.

Schließlich müssen wir nach dem Verlassen der Schleife die Kameraressourcen freigeben und das Videoobjekt schließen. Verwenden Sie cap.release(), um Kameraressourcen freizugeben, und out.release(), um das Videoobjekt zu schließen.

Auf diese Weise verlässt das Programm beim Drücken der Taste „q“ auf der Tastatur die Schleife und speichert die von der Kamera gelesenen Daten als Videodatei „output.avi“.

In

Mit der Funktion cv2.VideoWriter() wird ein Objekt zum Speichern von Videos erstellt. Seine Parameter werden im Folgenden erläutert:

Dateiname: Name der gespeicherten Videodatei. Bei „output.avi“ handelt es sich um den Dateinamen des gespeicherten Videos, der bei Bedarf geändert werden kann.

fourcc: Videocodec. fourcc ist ein vierstelliger Code, der zur Angabe des Codecs des Videos verwendet wird. Zu den gängigen vierstelligen Codes gehören MP4V, XVID, MJPG usw., die je nach Bedarf ausgewählt werden können. Im Beispielcode haben wir *'XVID' verwendet, um die Verwendung des XVID-Codecs anzuzeigen.

fps: Bilder pro Sekunde. fps stellt die Bildrate beim Speichern des Videos dar, also die Anzahl der pro Sekunde abgespielten Bilder. Im Beispielcode stellen wir die Bildrate auf 20,0 ein, die bei Bedarf angepasst werden kann.

FrameSize: Videogröße. FrameSize ist die Größe beim Speichern des Videos, also die Größe jedes Bildes. Im Beispielcode setzen wir die Abmessungen auf (save_width, save_height), wobei save_width und save_height die Breite und Höhe sind, die gemäß den Parametern der Kamera erhalten werden
 

Wenn Sie die Videodatei im MP4-Format speichern möchten, können Sie den Parameter fourcc in einen für das MP4-Format geeigneten Codec ändern

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

 

Im obigen Code haben wir *'mp4v' als fourcc-Parameter verwendet, was bedeutet, dass der MP4-Codec verwendet wird. Ändern Sie gleichzeitig den Namen der gespeicherten Datei in 'output.mp4'.

Nach dieser Änderung werden die von der Kamera gelesenen Daten im MP4-Format gespeichert. Bitte stellen Sie sicher, dass Ihre Version von OpenCV diesen Codec unterstützt, da sonst Fehler auftreten können.

Supongo que te gusta

Origin blog.csdn.net/weixin_45303602/article/details/133934918
Recomendado
Clasificación