Python は生の画像 + numpy の基本的な使用記録を読み込んで表示します

このタスクは、いくつかの生の写真を取得することです。他のヘッダー ファイルや情報は必要ありません。生の写真を開いて表示するには、Python を使用する必要があります。

(初心者として、私は jpg と png に一日中取り組んでいましたが、突然 raw になりました。つまり、非常に大きいということです)

1.生の画像形状情報(高さ、幅、チャンネル数)を取得する

第三者を通じてディスプレイを開き、その情報を見つけて記録し、後で使用する

インターネットで検索されたすべての種類の raw から jpg の画像については忘れましょう. 1 つまたは 2 つ試してみましたが、すべて失敗しました.

ここでは 2 つの方法をお勧めします。1 つはソフトウェア: ps、ps を使用して生の写真を直接開いて読み取ることができ、高さ、幅、チャネル数、および桁数は、開くと自動的に表示されます (ただし、今のところ、 ps のように幅と長さがランダムに一致します)、表示される画像は正確ではありません)、下の図に示すように、必要に応じて jpg、png などの他の形式に変換することもできます。

 もう 1 つの方法はオンライン サイトです: Photopea | オンライン フォト エディター

使い方は超簡単!! ! また、さまざまな一致するフォームを選択できます。画像をプレビューすることもできます。次に、正しい一致するフォームを選択できます。高さや幅などの対応する情報は画像に対応しています。

 (普段使いも非常に簡単で、さまざまな画像処理操作に利用できます。需要が大きくない場合は、ps は必要ありません)

2.python画像読み込み

   ハイチャネルとワイドチャネルの数の情報を使用して、numpy 画像を分析し、最後に opencv を介して画像を読み取ることができます。

import numpy as np
import cv2

# 注意到这个函数只能显示uint16类型的数据,如果是uint8的数据请先转成uint16。否则图片显示会出现问题。**
# image为array类型,多少维度都无所谓,直接操作全部元素
img = np.fromfile("D:/VScode/pyproject/PR/view/showRaw/1.raw", dtype=np.uint16)
print(img)  
print("数组元素总数:",img.size)      #打印数组尺寸,即数组元素总数  


# /均值、标准差归一化/
image = (img - np.average(img)) / np.std(img)
# ///
print(image)

imgData = image.reshape(288, 384, 1)
# 展示图像
cv2.imshow('img',imgData)
cv2.waitKey()
cv2.destroyAllWindows()

その中で、画像の正規化方法をいくつか使ってみました.大まかに以下の3つのよく使われる方法があることを知りました.自分の写真に合わせて試してみてください.今回私の写真を正規化した方が良い効果は平均値です. , 標準偏差正規化

# /“x-min/max-min”//
image = (img - np.min(img)) / (np.max(img) - np.min(img))
# ///


# ///simoid归一化/
image = img
for i in range(size):
    image[i] = 1.0 / (1 + np.exp(-float(img[i])))
# ///

# /均值、标准差归一化/
image = (img - np.average(img)) / np.std(img)
# ///

 3. numpy 画像処理の基本的な使い方

①np.fromfile

生の画像を読み取ってベクトル配列に変換できるため、後で処理するのに便利です

imgData2 = np.fromfile('D:/VScode/pyproject/PR/view/showRaw/2.raw', dtype='uint16')

②np.average: 平均値を取る np.mean との違いは、平均値を加重平均できる点です。

③np.std: 標準偏差を削除

④np.random.randint(0,10,(4,3)): 4x3の行列を0~10でランダムに生成

⑤ np.hstack: ベクター スプライシング。生の画像 numpy がベクター形式で読み込まれ、使用する必要があります。

⑥np.concatenate((a, b), axis=1): ab行列を列の形で連結し、さらに1列追加 

rotation = np.array([[1, 2, 3],
                     [4, 5, 6],
                     [7, 8, 9]])
 
trans = np.array([[7],
                  [8],
                  [0]])
z = np.concatenate((rotation, trans), axis=1)
[[1 2 3 7]
 [4 5 6 8]
 [7 8 9 0]]

4. 画像処理に関するいくつかの指示

①image.shape: 画像の高さと幅のチャンネルを表示

②image.size:画像データ長

③image[y:y+h,x:x+w]: 画像の切片、xy は切片の左上隅の始点

 現在、上記はニューラル ネットワークの学習過程にある個人の記録の一部です. これらは参考用です. 間違いがある場合は、コメント欄で修正してください. ! !

おすすめ

転載: blog.csdn.net/hhb3329/article/details/126141962