スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

プログラム大好きっ子がPythonに興味を持ったようです。Part3

平日企画Pythonプログラミングも早くも3日目!

今回は前回のプログラムに以下の機能を追加します。

・現在のフォルダに保存されている画像ファイルのリストアップ
・キーからの入力で表示画像を切り替え(jとkで画像リストを移動)


3回目にしてなんかビューワーっぽいにゃ!


・・・

・・・・・・

・・・・・・うん、ごめん調子乗った。

*今回の実行イメージ*
pyt0008.jpg

ソースコードは続きを読むからどうぞ


#coding:shift_jis

#↑で日本語が利用可能になる、特殊な言葉以外#で始まる文章は
#プログラムから無視される。

#system関連の機能を使うと言う宣言
import sys
import os

#OpenCVモジュールの中のcvクラスとhighguiクラスの利用宣言。
#画像処理とウィンドウなどの視覚的に訴える部分の機能の利用を宣言している。
from opencv import cv
from opencv import highgui

#ウィンドウのキャプション(タイトル)
window_name = "ネコハチビュワー"

#読み込み可能なファイルの拡張子一覧を作成
#追加したい場合、リストを拡張する。
#cvLoadImageが読み込めるファイルはリファレンスを参照して下さい。
ext_list = [".jpg" , ".bmp" , ".png"]

#現在のフォルダのファイルの一覧取得
#.とはパスの指定で現在位置を指す。
flist = os.listdir(".")

file_name =""
img_list = [];

#一覧から開けるファイルを検索
#同時に画像ファイルの一覧を作成する
for fname in flist:
(fpath , ext) = os.path.splitext(fname)
for chk_ext in ext_list:
if ext == chk_ext:
img_list.append(fname)


if len(img_list) < 1:
print "このフォルダには画像がないにゃん!"
exit(-1)

#画像リストの表示
print "***Image list***"
for s in img_list:
print s

#画像リストの先頭から画像を選択
idx = 0
file_name = img_list[0]

img = highgui.cvLoadImage(file_name)

#画像が読み込めなかった
if not img:
print "ファイルの読み込みに失敗したにゃん"
sys.exit(-1)

#ウィンドウ生成と画像読み込み
highgui.cvNamedWindow(window_name,highgui.CV_WINDOW_AUTOSIZE)
highgui.cvShowImage(window_name,img)

print "qキーを押すとウィンドウを閉じますだにゃん"
print "j:前の画像を見るにゃん"
print "k:次の画像を見るにゃん"


#現在のキーとは別に前回のキー入力の情報も保存する。
bef_key = -1
key = -1

while 1 :

bef_key = key
key = highgui.cvWaitKey(60)

if key == 'q':
break
#kを押すと次の画像を表示する
elif key == 'k' and bef_key != key:
idx = (idx + 1) % len(img_list)

#jを押すと前の画像を表示する
elif key == 'j' and bef_key != key:
idx = idx - 1
if idx < 0 :
idx = len(img_list) - 1
img = highgui.cvLoadImage(img_list[idx])
highgui.cvShowImage(window_name,img)

#画像が変更されたので画像を読み込み直す
if key == 'j' or key == 'k':
img = highgui.cvLoadImage(img_list[idx])
highgui.cvShowImage(window_name , img)


#ウィンドウを破棄する。
highgui.cvDestroyWindow(window_name)



 本当はウィンドウの名前を画像変更ごとに画像ファイル名に変更するコードも描いたのですが、ウィンドウ名が直接ウィンドウを操作する手法であるためか、名前だけを容易に変えることができませんでした。
 その結果、画像変更ごとにウィンドウを生成しなおす必要があり、レスポンスが非常に悪くなったため、画像を読み込み直すだけの仕様に変更しました。

なお、次回以降はちょっとずつこのソースコードの解説をします。
それではまた次回!



※プログラムの実行は自己責任で行って下さい。
 プログラム実行において発生した如何なる問題についても私、砂塵は責任を負いかねます。
スポンサーサイト

コメントの投稿

非公開コメント

twitter
    follow me on Twitter
    プロフィール

    砂塵

    Author:砂塵
    GIMP2でお絵描きしています。
    主にイラスト練習、プログラミングなどを扱っているブログです。

    Skype始めました。
    SkypeID:sazinn-gimp
    出没時間:平日21~26時、休日(土・日)

    Pixivはじめました
    微エロな絵を載せることがありますので、そういうのが苦手な方や嫌悪感を覚える方はご注意ください。

    カテゴリ
    リンク
    最新記事
    月別アーカイブ
    最新コメント
    RSSリンクの表示
    FC2カウンター
    FC2ブログランキング

    FC2Blog Ranking

    参加ブログカテゴリ
    にほんブログ村 IT技術ブログ プログラム・プログラマーへ
    にほんブログ村 イラストブログ イラスト練習へ
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。