投稿

4月, 2020の投稿を表示しています

Win10 NetBIOSの名前

【Windows 10対応】Windowsでホスト名からIPアドレスを見つける方法 より sudo apt-get install python-matplotlib

Python serialでデリミタがCRのみでreadlineが使えないとき

Python 2.6 以降だと PySerial で '\r' が readline の delimiter に使えない 参考にした。 自分で作ろう def readSIO(self): #ret = self.serPort.readline() ret = '' while True: c = self.serPort.read(1) c = c.decode() if c == '': return ret elif c == '\r': return ret + c else: ret += c return(ret)

Python OpenCVにおける輪郭(領域)

イメージ
輪郭: 初めの一歩 より import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('pic.png') #cv2.imshow('img',img) #cv2.waitKey(0) imgray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) #cv2.imshow('imgray',imgray) #cv2.waitKey(0) ret,thresh = cv2.threshold(imgray,127,255,0) #cv2.imshow('thresh',thresh) #cv2.waitKey(0) image,contous = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) #cv2.imshow('image',contous) #cv2.waitKey(0) img = cv2.drawContours(img,image,-1,(0,255,0),3) cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() 動いたが、正直良くわからない。 ここで画像を取り込んで、グレイに変換 im = cv2.imread('test.jpg') imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY) ここで2値化 ret,thresh = cv2.threshold(imgray,127,255,0) ここで輪郭抽出 image, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cv2.findContours() 関数は3個の引数を必要とする関数です.第1引数は入力画像,第2引数はcontour retrieval mode,第3引数は輪郭検出方法を指定するフラグです

Python ubuntuにpip3をインストールしてpython3用のmatplotlibをインストール

https://pcl.solima.net/pyblog/archives/57 こちらより。 こちらを行ったところ、Python2のmatplotlibがインストールされたので、 sudo apt-get install python-matplotlib 以下を試してみた。 sudo apt install python-pip python3-pip pip3 install matplotlib

Ubuntu へ matplotlibをインストールする方法

Ubuntu15.04でpipでMatplotlibがインストールできない件 より sudo apt-get install python-matplotlib

python openCV 画像ピラミッド

イメージ
画像ピラミッド こちらを動かしてみた。 import cv2 import numpy as np import matplotlib.pyplot as plt higher_reso = cv2.imread('pic.png') lower_reso = cv2.pyrDown(higher_reso) lower_reso = cv2.pyrDown(lower_reso) lower_reso = cv2.pyrDown(lower_reso) higher_reso = cv2.cvtColor(higher_reso, cv2.COLOR_RGB2BGR) lower_reso = cv2.cvtColor(lower_reso, cv2.COLOR_RGB2BGR) plt.subplot(121),plt.imshow(higher_reso) plt.title('original Image') plt.subplot(122),plt.imshow(lower_reso) plt.title('lower_reso') plt.show()

Python オフラインでpipする方法

【会社向け】オフラインでpip installしてプロキシ回避する方法 より。検査用PCはインターネットにつながっていないので。 pip install --no-deps whlファイル名 pip install --no-deps numpy-1.17.0-cp36-cp36m-win_amd64.whl 1 pip install --no-deps numpy-1.17.0-cp36-cp36m-win_amd64.whl

VBS でアプリを操作

Option Explicit main() sub main() dim aa set aa = new AutoApp aa.FileName = "CMD" aa.exec() aa.writelnStdIn("dir") aa.waitt(1) aa.quit() msgbox(aa.readStdOut()) aa.FileName = "notepad.exe" aa.exec() aa.waitApp() aa.ActivateAndSendKeys "TEST",100 aa.waitt(3) aa.quit() end sub Class AutoApp dim objShell dim objExec Private m_FileName Private m_ProcessId Public Property Get FileName FileName = m_FileName End Property Public Property Let FileName(vData) m_FileName = vData End Property Public Property Get ProcessId m_ProcessId = objExec.ProcessId ProcessId = m_ProcessId End Property Private Sub Class_Initialize() Set objShell = WScript.CreateObject("WScript.Shell") End Sub Public Function exec() Set objExec = objShell.Exec(m_FileName) End Function Public Function readStdOut() readStdOut = objExec.StdOut

Pyhton OpenCVのCannyエッジ検出

イメージ
OpenCVのCannyエッジ検出 を動かしてみた。 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('pic.png',0) edges=cv2.Canny(img,100,200) plt.subplot(121),plt.imshow(img,cmap='gray') plt.title('original Image'),plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(edges,cmap='gray') plt.title('Edge Image'),plt.xticks([]),plt.yticks([]) plt.show()

Python openCV 画像の勾配

イメージ
画像の勾配 を動かしてみた。 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('pic.png',0) laplacian = cv2.Laplacian(img,cv2.CV_64F) #laplacian = cv2.Laplacian(img,cv2.CV_64F) sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5) sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5) plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray') plt.title('Original'), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray') plt.title('Laplacian'), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray') plt.title('Sobel X'), plt.xticks([]), plt.yticks([]) plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray') plt.title('Sobel Y'), plt.xticks([]), plt.yticks([]) plt.show() import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('pic2.png') sobelx8u=cv2.Sobel(img,cv2.CV_8U,1,0,ksize=5) sobelx64f=cv2.Sobel(img,cv2.CV_64F,1,0,ksiz

vb.net Arraylistをカンマ区切りに変換する

String.Join()と.ToArray()でできた Str = String.Join(",", LineData.ToArray()) Dim LineData As New ArrayList LineData.Clear() For Each fld As Integer In m_clsProductName.SHIPPING_PRODUCT_FLD LineData.Add(getFieldValue(fld, item)) Next Str = String.Join(",", LineData.ToArray())

VBSのSendKeysを使用して、アプリを自動操作して動作確認した

VBSのSendKeysを使用して、アプリを自動操作して動作確認した Option Explicit dim objShell dim objExec main() sub main() logPrint("[START]" & date & " " & time) allInitialize() init() startApp1() setLot "20200414","100" serSend "dummy_data.csv",1 AppQuit() startApp2() setLot "20200414","100" serSend "dummy_data.csv",2 AppQuit() msgbox("END") logPrint("[END]" & date & " " & time) end sub sub setLot(shipdate,shipcount) WScript.Sleep 500 objShell.SendKeys "%fs" WScript.Sleep 500 objShell.SendKeys shipdate WScript.Sleep 500 objShell.SendKeys "{ENTER}" WScript.Sleep 500 objShell.SendKeys shipcount WScript.Sleep 500 objShell.SendKeys "{ENTER}" end sub sub AppQuit() WScript.Sleep 500 objShell.SendKeys "%fq" WScript.Sleep 500 end sub sub serSend(filename,mode) dim datafile dim x set datafile = new clsTex

PythonでSendKeys (Winsows10)

Pythonから電卓を起動し勝手に計算してもらう の以下を動かそうとして import SendKeys SendKeys.SendKeys(""" {LWIN} {PAUSE .25} calc.exe{ENTER} {PAUSE 1} 10 {+} 5 {=} {PAUSE 1} """) 以下を行ったと所成大にエラーになった。 pip install SendKeys C:\PROJECT\python>pip install SendKeys Collecting SendKeys Using cached SendKeys-0.3.zip (8.4 kB) Installing collected packages: SendKeys Running setup.py install for SendKeys ... error ERROR: Command errored out with exit status 1: command: 'c:\users\xx\appdata\local\programs\python\python37\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\xx\\AppData\\Local\\Temp\\pip-install-q0n1ia0d\\SendKeys\\setup.py'"'"'; __file__='"'"'C:\\Users\\xx\\AppData\\Local\\Temp\\pip-install-q0n1ia0d\\SendKeys\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"

python pyplot でグラフ

math.sin()でなくnp.sin()を使う import matplotlib.pyplot as plt import numpy as np x=np.arange(-np.pi,np.pi,.1) y = np.sin(x) plt.plot(x,y) plt.hlines([0,-1,1], x[0],x[-1], linestyles="dashed") plt.show()

VB.net 日付・時間を文字列へ

日付や時刻を文字列に変換するには? より now.ToString("yyyy/MM/dd HH:mm:ss")

VB.net 0パディングして数字を文字へ

数値を0埋めで文字列にするには? こちらより。 output = "8けた0埋め:" & myNumber.ToString("00000000") ' 出力:8けた0埋め:00012345 output = "8けた0埋め:" & myNumber.ToString("D8") ' 出力:8けた0埋め:00012345

Python pyplotで折れ線グラフとヒストグラム

イメージ
ファイルから測定値を読んでグラフ化 import numpy as np import matplotlib.pyplot as plt x=[] f=open("OK.DAT","r") lines =f.readlines() f.close() lines = lines[1:] lines = list(map(lambda x:x.split(","),lines)) count = 0 x=[] y=[] sum=0.0 for v in lines: x.append(count) y.append(float(v[30])) sum = sum + float(v[30]) count = count + 1 # if count > 100: # break x1=np.array(x) y1=np.array(y) average = sum / count print(average) plt.subplot(121) plt.plot(x1,y1) plt.title("Max Current(mA)") plt.ylim(800, 1000) # yを0-1000の範囲に限定 #plt.hlines([-1, 1,.5], 0,len(x1), linestyles="dashed") # 破線を描画 plt.hlines([average, 900,980], 0,len(x1), linestyles="dashed") # 破線を描画 plt.subplot(122) plt.hist(y1) plt.title("Max Current(mA)") plt.tight_layout() # タイトルの被りを防ぐ plt.show()

Python リストをNumPy配列ndarrayに変換: numpy.array()

NumPy配列ndarrayとPython標準のリストを相互に変換 より リストをNumPy配列ndarrayに変換: numpy.array() import numpy as np l_1d = [0, 1, 2] arr_1d = np.array(l_1d) print(arr_1d) print(arr_1d.dtype) # [0 1 2] # int64 arr_1d_f = np.array(l_1d, dtype=float) print(arr_1d_f) print(arr_1d_f.dtype) # [0. 1. 2.] # float64 NumPy配列ndarrayをリストに変換: tolist() import numpy as np arr_1d = np.arange(3) print(arr_1d) # [0 1 2] l_1d = arr_1d.tolist() print(l_1d) # [0, 1, 2]

VB.net Dictionary型

ハッシュテーブル(連想配列)を使うには? より。 覚書 Dim dict As New Dictionary(Of String, String) ' 要素の追加その1 dict("japan") = "日本" ' 要素の追加その2 dict.Add("india", "インド") ' 値の取得その1 Dim val As String = dict("japan") Console.WriteLine(val) ' 出力:日本 ' 値の取得その2 Dim value As String = "" If dict.TryGetValue("america", value) Console.WriteLine(value) ' 出力:アメリカ End If ' キーの列挙 For Each key As String In dict.Keys Console.WriteLine(key) Next ' 値の列挙 For Each v As String in dict.Values Console.WriteLine(v) Next ' キーの存在チェック If Not dict.ContainsKey("france") ' 存在しない場合 dict("france") = "フランス" End If ' 値の存在チェック Console.WriteLine(dict.ContainsValue("日本")) ' 出力:True ' 項目(キーと値)の列挙 For Each kvp As KeyValuePair(Of String, String) In dict Con

Python openCV モルフォロジー変換

モルフォロジー変換 こちらをやってみた 収縮(Erosion)と膨張(Dilation)、およびそれを組み合わせて輪郭を取り出したり、欠点を消したり強調することができる。 plt.subplot(331)の引数は(行、列、何番目)を表す。 matplotlib入門 こちらを参照した。 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('pic.png') kernel = np.ones((5,5),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1) dilation = cv2.dilate(img,kernel,iterations = 1) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel) print("# 矩形カーネル") print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))) print("# 楕円形カーネル") print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))) print("# 十字型カーネル") print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))) plt.subplot

Python フルパスから途中のフォルダを生成する

import os def makeFolder(fullPath): dirname=os.path.dirname(fullPath) if not os.path.exists(dirname): os.makedirs(dirname)

Python キーと値のリストから辞書を生成

Python: キーと値のリストから辞書を作成する こちらを参照 zip()で2つのリストのペアを作り、dict()で辞書にする keys = ['a', 'b', 'c'] values = [10, 20, 30] dic = dict(zip(keys, values)) # => {'a': 10, 'b': 20, 'c': 30}

Python openCV ガウシアンフィルタ,中央値フィルタ

イメージ
ガウシアンフィルタ こちらを動かしてみた。 白色ノイズの除去に有効らしい。 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('opencv.png') blur = cv2.GaussianBlur(img,(5,5),0) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Blurred') plt.xticks([]),plt.yticks([]) plt.show() 中央値フィルタ ごま塩ノイズに有効 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('goma.png') median = cv2.medianBlur(img,5) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(median),plt.title('median') plt.xticks([]),plt.yticks([]) plt.show()

python pyplot簡単なサンプル

イメージ
import numpy as np import matplotlib.pyplot as plt x = np.arange(-3, 3, 0.1) y = np.sin(x) plt.plot(x, y) plt.show() こんな感じ

Python openCV 画像のぼかし (平滑化)

イメージ
画像のぼかし (平滑化) を動かしてみた 5×5の範囲の平均化をcv2.blur()でとるので、ぼかして見える import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('opencv.png') blur = cv2.blur(img,(5,5)) plt.subplot(121),plt.imshow(img),plt.title('Original') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Blurred') plt.xticks([]),plt.yticks([]) plt.show()

Pyton ndarrayとリストの違い

ndarrayとリストの違いは? より NumPyのアレイは要素の型が全て同じで、Pytonのリストは要素にオブジェクトを入れられる。 見た目だけでなく内容も大分違った。 NumPyのアレイが使える所は使った方が早いだろう numpy.ndarrayは要素に対して型が割り当てられます。 import numpy as np data1 = np.array([1, 2]) print(data1.dtype) Pythonのリスト型では全てobjectとして扱われます。 [1, 'a', 3.2]

Python openCV 画像の平滑化 とnp.ones()

画像の平滑化 こちらをやってみた。 NumPy,matplotも知らないことが多い 【Numpy入門 np.ones】配列の全要素を1で初期化するones関数の使い方 要素が1の配列を出力。タプルで多元配列も可。2番目の引数は変数型。デフォルトはfloat64型 import numpy as np x = np.ones(5) #array([1., 1., 1., 1., 1.]) x2 = np.ones((4,3)) #[[1. 1. 1.] #[1. 1. 1.] #[1. 1. 1.] #[1. 1. 1.]] NumPyのarange, linspaceの使い方(連番や等差数列を生成) np.arange(初期値、終了値、ステップ)ステップは実数も可 NumPyで連番や等差数列(等間隔の配列ndarray)を生成するにはnumpy.arange()かnumpy.linspace()を使う。 arange()は間隔(公差)を指定、linspace()は要素数を指定という違いがあるので、目的によって使い分ける。 import numpy as np print(np.arange(3)) # [0 1 2] print(np.arange(3, 10)) # [3 4 5 6 7 8 9] print(np.arange(3, 10, 2)) # [3 5 7 9] print(np.arange(0.3, 1.0, 0.2)) # [0.3 0.5 0.7 0.9] print(np.arange(-3, 3)) # [-3 -2 -1 0 1 2] print(np.arange(10, 3)) # [] print(np.arange(10, 3, -2)) # [10 8 6 4] numpy.linspace()も等差数列を生成するが、間隔(公差)ではなく要素数を指定する。 第一引数startに最初の値、第二引数stopに最後の値、第三引数numに要素数を指定する。それらに応じた間隔(公差)が自動的に算出される。 import numpy as np print(np.linspace(0, 10, 3)) # [ 0. 5. 10.] print(np.linspa

Python openCV 大津の二値化

イメージ
大津の二値化 こちらを動かしてみた。 より鮮明に2値画像を判別できるらしい import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('pic2.png',0) # global thresholding ret1,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) # Otsu's thresholding ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) # Otsu's thresholding after Gaussian filtering blur = cv2.GaussianBlur(img,(5,5),0) ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) # plot all the images and their histograms images = [img, 0, th1, img, 0, th2, blur, 0, th3] titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)', 'Original Noisy Image','Histogram',"Otsu's Thresholding", 'Gaussian filtered Image','Histogram',"Otsu's Thresholding"] for i in range(3): plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray') plt.title(titl

Python タプルを文字列に変換

[Python]タプルを文字列に変換 こちらを参考に データベースからの戻り値がタプルなので、リストに変換するのに使いました nums = (1,2,3,4,5) # タプル => 文字列 text = "".join(map(str, nums))

Windows10 Office2010 (32.bit)インストール時にPythonからAccessのmdbファイルを操作する

イメージ
PythonからAccessのmdbファイルを操作する場合、Win10の64Bit OSでOffice2010の32bit版をインストールすると、Pythonから操作できなかった。 上記の環境下で64bitドライバを32bitドライバと共存させることで、PythonからAccessを操作できた。 手順 Office2010 32bit版がインストールしてある環境でPythonからAccessを操作 を参考に Microsoft Access データベース エンジン 2010 再頒布可能コンポーネント から64bit用ドライバ AccessDatabaseEngine_X64.exeをダウンロードする 「/passive」をつけてインストールする。(インストーラのチェックを回避するため) AccessDatabaseEngine_X64.exe /passive レジストリエディタ(regedit.exe)を開き、次のエントリを削除します。  (Office起動時に再設定が走らないようにするため)  HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice14.0CommonFilesPathsの『mso.dll』 Windows10上のPythonでAccessのDBを参照する こちらを参考に pip install pyodbc でインストール pip install pyodbc Pythonのインタラクティブモードでドライバのインストール状況を確認 >>> import pyodbc >>> [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')] ['Microsoft Access Driver (*.mdb, *.accdb)'] >>> Accessのmdbファイルを作って読んでみます(table1というテーブルが入っています) import sys import pyodbc con_str = 'Driver={{Microsoft Access Driver (*.mdb, *.accd

Python OpenCV 適応的しきい値処理

イメージ
適応的しきい値処理 をやってみた。 単純な2値化より、画像がはっきりする。人間の目は自動的にやってるんだろうな import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('pic1.png',0) img = cv2.medianBlur(img,5) ret,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) th2 =cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,\ cv2.THRESH_BINARY,11,2) th3 =cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,\ cv2.THRESH_BINARY,11,2) titles = ['Original Image', 'Global Thresholding (v = 127)', 'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding'] images = [img, th1, th2, th3] for i in range(4): plt.subplot(2,2,i+1),plt.imshow(images[i],'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show()

Python OpenCV 画像の閾値処理

イメージ
画像の閾値処理 を実行 【エラー】NameError: name ‘xrange’ is not defined とエラーが出たので こちら を参考にxrangeをrangeに修正 import cv2 import numpy as np from matplotlib import pyplot as plt img = cv2.imread('pic.png',0) ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY) ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC) ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO) ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV) titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV'] images = [img, thresh1, thresh2, thresh3, thresh4, thresh5] for i in range(6): plt.subplot(2,3,i+1),plt.imshow(images[i],'gray') plt.title(titles[i]) plt.xticks([]),plt.yticks([]) plt.show() 上手く動きました。 http://opencv.jp/opencv2-x-samples/image_binarize CV_THRESH_BINARY : 閾値を超えるピクセルは maxVal に,それ以外のピクセルは 0 になります. CV_THRESH_BINARY_INV : 閾値を超え