0

PiCamera を使用して ROI (Region of Interest) 関数を作成しようとしています。「ズーム」方法がどのように機能するかを理解するために、一連の ROI 画像から完全な画像を作成しようとしました。これは私のコードです:

from picamera.camera import PiCamera
from picamera.array import PiRGBArray
import time
import cv2

FULL_H = 1920
FULL_W = 2560

n_rows = 3
n_cols = 4

cam = PiCamera(0)
cam.framerate = 32
cam.awb_mode = 'fluorescent'
cam.shutter_speed = 3200
cam.resolution = FULL_W, FULL_H
cam.sensor_mode = 2
frame = PiRGBArray(cam)

# Take full resolution picture
cam.capture(frame, format="bgr", use_video_port=False)
cv2.imwrite("full_img.png", frame.array)

# Set the resolution to ROI resolution and zoom to first section
cam.resolution = int(1 / n_cols * FULL_W), int(1 / n_rows * FULL_H)
cam.zoom = (0.0, 0.0, 1 / n_cols, 1 / n_rows)
frame = PiRGBArray(cam)

# Camera init time
time.sleep(2)

# Loop over rows and columns and take ROI images
rows = []
for i in range(n_rows):
    row = []
    for j in range(n_cols):
        print("Zooming to: {}".format((j / n_cols, i / n_rows, 1 / n_cols, 1 / n_rows)))
        cam.zoom = (j / n_cols, i / n_rows, 1 / n_cols, 1 / n_rows)  # zoom into correct part
        time.sleep(0.1)  # Give camera time to zoom
        frame.truncate(0)
        cam.capture(frame, format="bgr", use_video_port=True)  # Take ROI picture
        row.append(frame.array)
    rows.append(row)

# Concatinate the columns into rows and then rows into full image
full_rows = []
for row in rows:
    full_rows.append(cv2.hconcat(row))
full_img = cv2.vconcat(full_rows)
cv2.imwrite("full_img_from_rois.png", full_img)  # Write the assembled image to file

cam.close()

これは出力です:

Zooming to: (0.0, 0.0, 0.25, 0.3333333333333333)
Zooming to: (0.25, 0.0, 0.25, 0.3333333333333333)
Zooming to: (0.5, 0.0, 0.25, 0.3333333333333333)
Zooming to: (0.75, 0.0, 0.25, 0.3333333333333333)
Zooming to: (0.0, 0.3333333333333333, 0.25, 0.3333333333333333)
Zooming to: (0.25, 0.3333333333333333, 0.25, 0.3333333333333333)
Zooming to: (0.5, 0.3333333333333333, 0.25, 0.3333333333333333)
Zooming to: (0.75, 0.3333333333333333, 0.25, 0.3333333333333333)
Zooming to: (0.0, 0.6666666666666666, 0.25, 0.3333333333333333)
Zooming to: (0.25, 0.6666666666666666, 0.25, 0.3333333333333333)
Zooming to: (0.5, 0.6666666666666666, 0.25, 0.3333333333333333)
Zooming to: (0.75, 0.6666666666666666, 0.25, 0.3333333333333333)

画像全体を 12 の正方形のセクション (3 行、4 列) に分割すると、12 個の 640x640 画像になります。次に、これらの画像を連結して、2560x1920 の完全な画像を再作成しようとします。

これらは私が取得した画像です(画像が大きすぎて直接アップロードできません、申し訳ありません):

全体像 - https://imgur.com/QXIMGXJ

組み立てた画像 - https://imgur.com/EtURnML

うまくいけば、組み立てられた画像が「押しつぶされた」ように見え、セン​​サーの全範囲をカバーしていないこともわかります (両側のいくつかの数字が欠落しています)。一部のピースのホワイトバランスもずれているように見えます。これは解決策の手がかりになるかもしれませんが、その理由はわかりません.

なぜズーム機能はそのように動作するのですか? それは何とか修正できますか?画像の下部でホワイト バランスがおかしいのはなぜですか?

これが「ズーム」メソッドの避けられない動作である場合、組み立てられた画像と同じように完全な画像を表示する方法はありますか (トリミングされ、押しつぶされている可能性があります)。 ROI 画像を使用して画像全体のセクションと比較し、それらを同じにしたい

4

0 に答える 0