読者です 読者をやめる 読者になる 読者になる

pythonで特定のディレクトリから画像ファイルのリストを取得(拡張子で判別)

pythonで特定のディレクトリから画像ファイルのリストを取得する。
画像ファイルかどうかは拡張子で判定、今回は.jpg, .png, .bmpを画像ファイルとする(大文字小文字は区別しない)

# 正規表現でディレクトリから画像ファイルのリストを取得
import os
import re

path = "data/"
pattern = ".*\.(jpg|png|bmp)"
files = [f for f in os.listdir(path) if re.search(pattern, f, re.IGNORECASE)] # 大小文字無視
print(files)

結果
['001.png', '002.png', '003.png']

globでは正規表現が使えないため、少し遠回りする形になった。

python + opencv で画像を回転 rev2

前回の記事は以下

skattun.hatenablog.jp


前回はdst画像の背景が黒くなっていたので、alphaチャンネルを使って
背景透過にしたrev2を用意

import numpy as np
import cv2

# 画像読み込み(alphaチャンネル有り)
src_mat = cv2.imread("001.png", cv2.IMREAD_UNCHANGED)
print(src_mat.shape) # 32,32,4

# 画像サイズの取得(横, 縦)
size = tuple([src_mat.shape[1], src_mat.shape[0]])

# dst 画像用意
dst_mat = np.zeros((size[1], size[0], 4), np.uint8)

# 画像の中心位置(x, y)
center = tuple([int(size[0]/2), int(size[1]/2)])

# 回転させたい角度(正の値は反時計回り)
angle = -45.0

# 拡大比率
scale = 1.0

# 回転変換行列の算出
rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)

# アフィン変換
img_dst = cv2.warpAffine(src_mat, rotation_matrix, size, dst_mat,
                         flags=cv2.INTER_LINEAR,
                         borderMode=cv2.BORDER_TRANSPARENT)

# 表示
cv2.imwrite("dst.png", img_dst)

src
f:id:skattun:20170219183609p:plain

dst
f:id:skattun:20170219213417p:plain


背景透過のアルファチャンネル付きになった。

python + opencv で画像を回転

python + opencvのアフィン変換を使って画像を回転

 

import numpy as np
import cv2

# 画像読み込み
img_src = cv2.imread("001.png")

# 画像サイズの取得(横, 縦)
size = tuple([img_src.shape[1], img_src.shape[0]])

# 画像の中心位置(x, y)
center = tuple([int(size[0]/2), int(size[1]/2)])

# 回転させたい角度(正の値は反時計回り)
angle = -45.0

# 拡大比率
scale = 1.0

# 回転変換行列の算出
rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)

# アフィン変換
img_rot = cv2.warpAffine(img_src, rotation_matrix, size, flags=cv2.INTER_CUBIC)

# 表示
cv2.imshow("Show ROTATION Image", img_rot)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

src

f:id:skattun:20170219183609p:plain

 

dst

f:id:skattun:20170219183900p:plain

 

参考にしたサイト:

Python OpenCV3で画像のアフィン変換(中心を指定した回転) | from umentu import stupid

画像の幾何学変換 — opencv 2.2 documentation

python3でopencv3をインストール

python始めました。

 

opencvを使いたかったのでインストール

opencv3.0からpython3を始めとするサポート環境が増えるようです。

OpenCVとは? 最新3.0の新機能概要とモジュール構成 - Build Insider

 

C#も公式サポートして欲しい。現在の非公式ライブラリだと使える関数が限られます。

以前C#OpenCV使った時はFFTが出来なくて、途中からOpenCV処理部をC++で書き直す事になりました。だが今はどうでもいいですね。

 

pythonの環境は以下の通り。

pyenv

pyenv 1.0.6

 

pyenv global

anaconda3-4.2.0

 

以下を実行

conda install --channel https://conda.anaconda.org/menpo opencv3

 

動作確認

# test.py

import numpy as np
import cv2

# 画像読み込み
img = cv2.imread("001.png")
cv2.imshow("color", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

お手軽!

ブログ始めました

技術系ネタの備忘録と、その他公開したい!と思ったことを書きたいと思います。