前提・実現したいこと
Y8(Y800)フォーマットで取得したカメラ画像について、Python(+OpenCV)を使って画像処理したいと考えています。前回質問したときに教えていただいたプログラムで画像を表示できるようになりましたが、下図のように縞模様になってしまいます。(他の画像もすべて同じ現象です)
IrfanVeiw64という画像ビュワーアプリを使ってRAWデータを表示すると、下図のように縞模様にはならないため、撮影、データ保存はできていると考えています。下記のPythonプログラムではバイナリ形式のRAWファイルを1ピクセルあたり8ビットとしてファイルを読み込んでから、640x400に再配列化していると理解しています。このコード以外に必要な操作があれば、アドバイスいただけますとありがたいです。よろしくお願いいたします。
※前回、解決済とした後に縞模様現象になっていることに気づいたため、立て続けの投稿になります。
使用カメラ:
Raspberry Pi インダストリアルカメラ OV9281 外部トリガー モノクロ グローバル シャッターセンサー
撮影条件:
画像解像度: 640x400
フレームレート:250fps(実際には、メモリなどの問題で210fps程度で取得されています)
取得画像のフレームサイズ:約1MB/フレーム
【Pythonで表示させた画像】
黒く表示されている行は画素が0の行に対応しているのかと思っていましたが、下の【参考】各画素の値にあるように、出力は1行おきに0になっているので、それであればもっと緻密な縞模様になるのではないかとも思いました...
【IrfanVeiw64で表示させた画像】
※ちょっと暗いですが、同じ数字が表示されています。拡大表示しても縞模様は見えませんでした。
【参考】各画素の値(Pythonプログラム中のimをテキストファイルで出力、640x400の値を一部表示)
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
Python
1import numpy as np 2import cv2 3from matplotlib import pyplot as plt 4 5fd = open('00001.raw', 'rb') 6rows = 400 7cols = 640 8f = np.fromfile(fd, dtype=np.uint8,count=rows*cols) 9im = f.reshape((rows, cols)) #notice row, column format 10fd.close() 11 12 13# ここからグラフ設定 14# フォントの種類とサイズを設定する。 15plt.rcParams['font.size'] = 14 16plt.rcParams['font.family'] = 'Times New Roman' 17fig = plt.figure() 18ax1 = fig.add_subplot(111) 19 20# 画像をプロット 21ax1.imshow(im, cmap='gray') 22 23# 軸のラベルを設定する。 24ax1.set_xlabel('x [pix]') 25ax1.set_ylabel('y [pix]') 26 27fig.tight_layout() 28plt.show() 29plt.close() 30
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー