2017年8月15日火曜日

【Python】2次元配列を独自ソートで並び替え

目的

list型の2次元配列をソートしたかったが、検索しても要素を指定してソートしている記事・ブログしか見当たらなかった。そこで、独自の指定でソートする方法を記す。

環境

  • Windows10
  • Python 3.6.1

ソース

2次元配列の各要素は、[x1,y1,x2,y2]の配列としている。線分のStart座標とEnd座標を表すものとする。これを各要素の長さ順にソートする。

lists = [[1,2,1,1],[1,1,1,1],[1,2,3,4],[1,1,1,1]]
print(lists) # ソート前
print( sorted(lists, key=lambda x: pow(abs(x[0]-x[2]),2) + pow(abs(x[1]-x[3]),2) ) ) # ソート後

2017年8月3日木曜日

【Python】【Pillow】Windowsでの画像読み込みはPillowがよい。

目的

  あるプログラムを作っていて、画像を読み込む必要があった。その際OpenCVもしくはPillowの選択肢があったが、ドラッグ&ドロップでファイルを読み込ませる場合、日本語や機種依存文字(①.pngとか)のファイル名ではOpenCVのときは読み込めなく、Pillowでは可能だったため、それをここに記す。

環境

  • Windows10
  • Python 3.6.1
  • Pillow  バージョンがわからない。。。
  • OpenCV バージョンがわからない。。。

実行ソース

OpenCvでの読み込みに失敗しており、画像を何かしようとすると落ちる。 cv2.imshow()の部分だ。

import sys
import cv2
from PIL import Image

# 引数を取り込む
fileName = sys.argv[1:] # プログラム名は取り込まない

# 画像読み込み
img = Image.open( fileName[0], 'r' ) # OK
imgCv = cv2.imread( fileName[0], cv2.IMREAD_GRAYSCALE) # NG
img.show()
cv2.imshow("OpenCV", imgCv)  # ここで落ちる

下記は上記ソースを実行するときに必要な、ドラッグ&ドロップでファイルを読み込ませるために必要なバッチファイル。

cd /d %~dp0
python Read_shift_jis.py %*
set /P STR_INPUT="Enterキーを押してください:"

実行結果