Python : 動画を保存する。

カメラの撮影にて、カメラを動かすことと、画像の保存についての紹介をしましたが、

動画を保存する場合もあるので、この方法についてです。

 

この時をOpencvを使うなど変わらないことが多いので、

変更している部分のみ紹介します。

この部分が、動画を保存するために使うVideoWriterです。

FourCCというのは詳細はここにありますが、

使っているプラットフォームで使えたり使えなかったりするので、

XVIDでダメだったらMJPGなど別のもので試してください。

fourcc = cv2.VideoWriter_fourcc(*'XVID')

この後に書き込む変数(今回はoutという名前)を決めて、

VideoWriterの書き方としては(保存ファイル名、Fourcc(上で決めたやつ),

フレイムスピード(今回は30)、画面のサイズ(width,Height))という書き方です。
out = cv2.VideoWriter('movie.mp4',fourcc,30,(w,h))

動画をスロー再生したい場合は30の値を1にすればコマ送りになります。

 

このプログラムは画面で1回sを押すとmovie_1 が1になり、

動画の保存を開始します。

保存の方法はこの方法です。

out.writeのカッコ内に、保存したい画像名を入れます(今回はframe1)

if movie_i == 1:
  out.write(frame1)

最後に忘れちゃいけないのは、動画をリリースして閉じること。

プログラムはなんでもそうなのですが、

開いたものは必ず閉じて終わるようにしてください。

じゃないと様々なエラーがでます。

out.release()

 

下記がプログラムの詳細です。

import cv2

#カメラのNoの設定、1つしかカメラがない場合は0
cap_no = 0
cap_0 = cv2.VideoCapture(cap_no,cv2.CAP_DSHOW)

w = 640
h = 480

#カメラのサイズを640 x 480ピクセルに設定
cap_0.set(cv2.CAP_PROP_FRAME_WIDTH, w)
cap_0.set(cv2.CAP_PROP_FRAME_HEIGHT, h)

#とりあえず画面横にフレーム数を表記
j = 0
#フレーム数を表記する文字のフォント
fontType = cv2.FONT_HERSHEY_COMPLEX
#保存するファイル等の設定
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('movie.mp4',fourcc,30,(w,h))
        
movie_i = 0

#while文にてカメラがつながっている限りは動画撮影
while(cap_0.isOpened()):
    #カメラを読み込む
    ret1, frame1 = cap_0.read()
    #画像にフレーム数を書き込む
    cv2.putText(frame1,str(j),(20,50), fontType, 2, (0, 0, 0), 2, cv2.LINE_AA)
    #フレーム数の計算
    j = j + 1
    #画像を表示
    cv2.imshow('frame1',frame1)
    
  #movie_iが1の時、動画を保存する。 if movie_i == 1: out.write(frame1) #キー入力を待つqを押したら、画像表示の中止 key = cv2.waitKey(1) #終了 if key & 0x00FF == ord('q'): break #画像の保存 elif key & 0x00FF == ord('s'): #sを一回押すと動画撮影スタート if movie_i == 0: print('start movie') movie_i = 1 #sをもう一度押すと動画撮影スタートお及びカメラストップ elif movie_i == 1: print('movie stop') movie_i = 0 break #カメラをリリース cap_0.release() #動画もリリース;ちゃんと閉じないと動画が保存されないときがあります。 out.release() #画像をすべて閉じる cv2.destroyAllWindows()

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。

Python : カメラの撮影

PythonOpencvを使ったカメラの撮影方法です。

これはスマホのカメラのように、カメラの画像を見ながら撮影する方法です。

 

まずはopencvを使うため、opencvのインポートをします。

import cv2

 

その後、カメラやカメラサイズを決めます。

カメラのNoの設定、1つしかカメラがない場合は0
cap_no = 0
cap_0 = cv2.VideoCapture(cap_no,cv2.CAP_DSHOW)

カメラのサイズを640 x 480ピクセルに設定
cap_0.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap_0.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

 

カメラを移すというプロセスは

カメラの画像を取り込む→画像を表示する→次のカメラの画像を取り込む

→前の画像を上書きして表示する。

ということを繰り返すプログラムになるため、

 

手っ取り早くwhile文でカメラがtrue(正常につながっている状態)ならば

動き続けるようにします。
while(cap_0.isOpened()):

これで、cap_0という名前に設定したカメラの画像を読み込みます。

ret1, frame1 = cap_0.read()


何もしないのもつまらないので、画像にフレーム数でも書き込みます。
cv2.putText(frame1,str(j),(20,50), fontType, 2, (0, 0, 0), 2, cv2.LINE_AA)

フレーム数は1ずつ増えるので、1足していきます
j = j + 1
画像を表示します。
cv2.imshow('frame1',frame1)

ここまでだと止まらないプログラムになってしまうため、

止められるようにキー入力で止められるようにします。
キー入力を待つqを押したら、画像表示の中止
key = cv2.waitKey(1)
ここが終了
if key & 0x00FF == ord('q'):
break


これは次いでですが、画像の保存
elif key & 0x00FF == ord('s'):
cv2.imwrite('frame00.jpg',frame1)

 

最後にwhile文を抜けたとに、カメラを閉じるのと、表示したフレームを閉じます。

#カメラをリリース
cap_0.release()
#画像をすべて閉じる
cv2.destroyAllWindows()

 

下記がプログラムの詳細です。

 

import cv2

#カメラのNoの設定、1つしかカメラがない場合は0
cap_no = 0
cap_0 = cv2.VideoCapture(cap_no,cv2.CAP_DSHOW)
#カメラのサイズを640 x 480ピクセルに設定
cap_0.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap_0.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

#とりあえず画面横にフレーム数を表記
j = 0
#フレーム数を表記する文字のフォント
fontType = cv2.FONT_HERSHEY_COMPLEX

#while文にてカメラがつながっている限りは動画撮影
while(cap_0.isOpened()):
    #カメラを読み込む
    ret1, frame1 = cap_0.read()
    #画像にフレーム数を書き込む
    cv2.putText(frame1,str(j),(20,50), fontType, 2, (0, 0, 0), 2, cv2.LINE_AA)
    #フレーム数の計算
    j = j + 1
    #画像を表示
    cv2.imshow('frame1',frame1)
    
    #キー入力を待つqを押したら、画像表示の中止
    key = cv2.waitKey(1)
    #終了
    if key & 0x00FF  == ord('q'):
        break
    #画像の保存
    elif key & 0x00FF  == ord('s'):
        cv2.imwrite('frame00.jpg',frame1)
#カメラをリリース
cap_0.release()
#画像をすべて閉じる
cv2.destroyAllWindows()

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。

Python : テキストデータの読み込み、見出しの設定

pythonでテキストデータを読み込む際、

1列目から使いたいときにそのままだと1列目を見出しにしてしまったり、

文字列が数列あると、読み込めなかったりする場合に、見出しを設定してやると

うまくいく場合が多いということがありますので、

見出しを設定する方法についてです。

ちなみにテキストデータの読み込みは下記に乗せてあります。

kangkang1981.hatenablog.com

まずはモジュールはpandasを使うので、

import pandas as pd

見出しを設定します。

設定は[]でくくったリストをつくればいいだけです。

col_names  = ['C01','C02','C03'] 

今回はC01,C02,C03という名前にしています。

 

後は、name = col_namesというのを入れてあげればよいです。

data_text = pd.read_table('text_123.txt',sep=',',names=col_names)

 

こんな感じのデータフレームになります。

f:id:Kangkang1981:20200705191519j:plain

 

後は、文字コードによって読み取れないことがあるので、よく使うのは

この2つだと思いますが、

utf-8

shift-jis

こんな感じで書きます。

data_text1 = pd.read_table('text_123.txt',sep=',',names=col_names,encoding='shift-jis')

 

data_text2 =

pd.read_table('text_123.txt',sep=',',names=col_names,encoding='utf-8')

 

 詳細のプログラムは下記です。

#モジュールのインポート
import pandas as pd
#見出しの名前を設定
col_names = ['C01','C02','C03']
#テキストデータの読み込み
data_text = pd.read_table('text_123.txt',sep=',',names=col_names)
#shift-jisの場合 data_text1 = pd.read_table('text_123.txt',sep=',',names=col_names,encoding='shift-jis') #utf-8の場合 data_text2 = pd.read_table('text_123.txt',sep=',',names=col_names,encoding='utf-8')

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。

2020/06 資産状況

6月の資産状況です。

まずは株価の詳細はこのようになっています。

f:id:Kangkang1981:20200701192314j:plain

やっと投資額合計で400万円です。

 

6月は賞与月のため、ボーナスで自社株を買って増えたのを除くと、

AT&T(5株) , PPL(2株), BP ADR(7株)を購入、

これ以外にオハラの信用売りをして2万円ぐらい儲かった分、

BP ADR, RDSBの配当金(訳8,500円)の再配当と後は2万円ぐらいの購入です。

 

株価が直近は多少下がっていますが、暴落がないので、

相変わらず大量購入したいという気になれないですね・・・

トータルでマイナス16万円ぐらいですが、

まぁ去年今年の配当金8万円とオハラの信用売り分で合わせて10万ぐらいは

再配当で買っているので、マイナス6万円になりますね。

コロナ暴落の時に買っておいた分があるので、

このくらいで済んでいるというところですね。

今の資産の割合は下記です。

f:id:Kangkang1981:20200701192820j:plain

今月はやっと自社株が100株に到達!?

現金化が後2週間ぐらいでできるので、再配分ができます!

後は、10万円の給付金の分ですね。

子供の教育資金用としてはウェルスナビに入れようと思っているので、

ここに50万ぐらい入れて後は、AT&T、PPL、IBMあたりかな~

と思っています。

また、買うときで気分が変わるかもしれませんけどね。

 

それではみなさん、投資は自己責任でお願いいたします。

 

Python : テキストデータの読み込み pandas

pythonを使った、テキストデータの読み込みについてです。

csvでの読み込みは以前書きましたが、

kangkang1981.hatenablog.com

 

textでは書いていなかったので、これについても記載しておきます。

 とりあえず使うテキストデータは下記です。

No,data
1,100
2,200
3,300
4,400
5,500

 

プログラムについてですが、

まずpandasを使うので、モジュールをインポートします。

import pandas as pd

 

テキストデータを読み込むのは、read_table()というのを使います。

今回のデータはカンマ「,」で区切っているので、

テキストデータの場合はこれを指定する必要があるので、

sep=','を入れる必要があり、こんな感じになります。

data_text = pd.read_table('text_123.txt',sep=',')

 

こうするとデータフレームはこのようになります。

f:id:Kangkang1981:20200628111243j:plain

 

プログラムの詳細は下記です。

#モジュールのインポート
import pandas as pd

#テキストデータの読み込み
data_text = pd.read_table('text_123.txt',sep=',')

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。

Python : 膨張(dilate)、収縮(erode)処理

最近は、ソフトウェアよりもソフトを動すためのハード関連の

図面書いたり、電気関連のことをやったりと

ソフトをあまりやっていなかったのもあり、更新していませんでした。

会社でリストラやりそうな雰囲気があり、

仕事のモチベーションが下がっているのもありますけどね、

そんな中来月から組合執行委員になるのですが・・・

と色々あるのですが、単純にさぼっていました。

 

前置きが長くなりましたが、膨張、収縮の処理についてです。

基本はノイズ除去の際に使う処理なのですが、ちょうどよい画像がないので、

いつものlenaさんでやります。

f:id:Kangkang1981:20200310225916j:plain

今回使うモジュールはいつものopencvとnumpyです。

numpyではカーネルの指定をします。

import cv2

import numpy as np

 

まずこの処理は二極化された画像しか使えないため、

今回は大津氏のプログラムを使い二極化画像を使います。

 frame = cv2.imread('lena.jpg')
#白黒画像を作成
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#二極化、大津氏プログラム
ret,th_otsu = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

これが今回使う画像です。

f:id:Kangkang1981:20200626213814j:plain

 

ここから処理になります。

まずカーネル(構造的要素)を決めます。

正直細かいことはよくわかっていないのですが、

大まかには膨張、縮小する際の範囲決めです。

今回はカーネルを(3,3)と(5,5)の場合で比較してみます。

カーネルはこのように書きます。

kernel = np.ones*1

 

収縮処理

f:id:Kangkang1981:20200626214755j:plain

膨張処理

f:id:Kangkang1981:20200626214820j:plain

 

このようにカーネルの範囲が大きくなると、収縮の際は黒の範囲が、

膨張の時は白が増えるのがわかりますね。

 

プログラムの詳細は下記です。

import cv2
import numpy as np

frame = cv2.imread('lena.jpg')
#白黒画像を作成
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#二極化、大津氏プログラム
ret,th_otsu = cv2.threshold(gray,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

#カーネルサイズの決定
kernel = np.ones((3,3),np.uint8)
#縮小処理
erosion_th = cv2.erode(th_otsu,kernel)
#膨張処理
dilation_th = cv2.dilate(th_otsu,kernel)

#カーネルサイズを5にすると
kernel5 =  np.ones((5,5),np.uint8)
#縮小処理 カーネル5
erosion5_th = cv2.erode(th_otsu,kernel5)
#膨張処理 カーネル5
dilation5_th = cv2.dilate(th_otsu,kernel5)

#画像を横に連結 左がカーネル3、右がカーネル5
frame_erosion = cv2.hconcat([erosion_th,erosion5_th])
frame_dilation = cv2.hconcat([dilation_th,dilation5_th])

#画像の書き込み
cv2.imwrite('th_otsu.jpg',th_otsu)
cv2.imwrite('erosion.jpg',frame_erosion)
cv2.imwrite('dilation_th.jpg',frame_dilation)

#画像の表示
cv2.imshow('moto',th_otsu)
cv2.imshow('erosion',frame_erosion)
cv2.imshow('dilation_th',frame_dilation)

#キー入力を待つ
cv2.waitKey(0)
#全ての開いたウインドウ閉じる
cv2.destroyAllWindows()

今までにpythonについて書いた記事はここにリンクを貼ってあります。

興味があればぜひご覧ください。

*1:3,3),np.uint8)

kernel5 = np.ones((5,5),np.uint8)

 

縮小処理はこのように書きます。
erosion_th = cv2.erode(th_otsu,kernel)

erosion5_th = cv2.erode(th_otsu,kernel5)


膨張処理は
dilation_th = cv2.dilate(th_otsu,kernel)

dilation5_th = cv2.dilate(th_otsu,kernel5)

 

画像はこのようになります(左側が(3,3) 、右側が(5,5

オハラ 信用売り

オハラの決算が6/11に出て、マイナス10億の赤字!

 

kangkang1981.hatenablog.com

ということで、6/12に株価が下がると思いきや

f:id:Kangkang1981:20200615200842j:plain

あまり下がらず(TT)

今日も午前中待ってみたのですが、若干しか変わらなかったので、

1,006円で買い戻しました・・・

 

平均単価が1,037円で、700株の売りだったので、

税金もろもろ引かれて13,417円の利益と、

マイナスにならなかっただけいいか~という結果でした・・・

 

しばらくはまだ売らなければ!?と思う日が来そうな気もしますが、

仕事に集中もできないので、買い戻してしまいました。

 

とりあえず、少しでも増えたのでAT&Tを4株購入予定です。

しばらくは、博打はせずに、米国株の定期購入ですね。

 

信用売り、米国株の購入は自己責任でお願いいたします。