前段時間我一直在研究PIE SDK與Python的結合,因為在我的開發中,我想獲取一張圖片的統計直方圖,雖然在SDK中有提供關於直方圖的類介面(如IStatsHistogram 介面、HistogramStatDialog 類),但其中有些方法得到的結果數據是有些小問題的(已經向技術人員反應),所以 ...
前段時間我一直在研究PIE SDK與Python的結合,因為在我的開發中,我想獲取一張圖片的統計直方圖,雖然在SDK中有提供關於直方圖的類介面(如IStatsHistogram 介面、HistogramStatDialog 類),但其中有些方法得到的結果數據是有些小問題的(已經向技術人員反應),所以打算自己寫一個。
我是通過PIE的官方博文(https://www.cnblogs.com/PIESat/p/10244229.html)進行研究的,使用的方法一:通過Main傳參。在技術員姐姐的耐心指導下,用Python得到我想獲得的直方圖,再通過C#調用Python,最後成功獲得直方圖。
結果如下圖所示:
先打開一張柵格圖片
開發環境:vs2013 framework4、 python 3.7
通過Python中的這三個模塊 PIL、numpy、matplotlib可以比較容易得到我想要的直方圖,Python代碼如下:
1 #-*- coding: UTF-8 -*- 2 3 import sys 4 from PIL import Image 5 import numpy as np 6 import matplotlib.pyplot as plt 7 8 #索引傳入的圖片地址 9 aaa=sys.argv[1] 10 11 src=Image.open(aaa) 12 r,g,b=src.split() 13 plt.figure("彩色直方圖") 14 ar=np.array(r).flatten() 15 plt.hist(ar, bins=256, density=1,facecolor='r',edgecolor='r') 16 ag=np.array(g).flatten() 17 plt.hist(ag, bins=256, density=1, facecolor='g',edgecolor='g') 18 ab=np.array(b).flatten() 19 plt.hist(ab, bins=256, density=1, facecolor='b',edgecolor='b') 20 21 #顯示直方圖視窗 22 plt.show()
C#代碼如下:
註意添加引用System.Threading.Tasks
1 private void 外部調用ToolStripMenuItem_Click(object sender, EventArgs e) 2 { 3 //啟動一個進程 4 System.Diagnostics.Process p = new System.Diagnostics.Process(); 5 p.StartInfo.UseShellExecute = false; 6 p.StartInfo.RedirectStandardOutput = true;//重定向輸出 7 p.StartInfo.RedirectStandardError = true; 8 //啟動python.exe 9 p.StartInfo.FileName = @"G:\pythonOnhere\python.exe";//自己安裝python.exe的路徑 10 p.StartInfo.CreateNoWindow = true; 11 12 string m_InputFile1 = m_InputFile.Replace(@"\", "/");//已經打開的柵格文件路徑,由於python識別的路徑格式和C#有一點區別,註意轉換格式 13 p.StartInfo.Arguments = @"E:\PIE開發\2.py" + " " + m_InputFile1; //構造參數,將演算法文件(.py)和演算法參數一併傳入,以空格間隔 14 p.EnableRaisingEvents = true; 15 p.Start(); 16 }
有幫助的話,記得點個贊支持一下哦~
也歡迎各位評論,指點,交流